Удалить аннотации из PDF в java, который использует itext

Привет, я работаю над проектом, в котором PDF-файл создается с использованием модели и представления и представления PDF, в котором используется itext 5. Одно из полей в таблице — это поле комментария из пользовательского интерфейса. Я хочу удалить аннотации к URL-адресу в комментарии (если в комментарии есть какие-либо URL-адреса). Я хочу знать, есть ли способ удалить аннотации.

Класс просмотра PDF

@Override
protected void buildPdfDocument(Map<String, Object> model, Document doc,
        PdfWriter writer, HttpServletRequest request, HttpServletResponse response)
        throws Exception {
    // get data model which is passed by the Spring container
    List<upload> upl = (List<upload>) model.get("uploads");
     
    doc.add(new Paragraph("Recommended books for Spring framework"));
     
    PdfPTable table = new PdfPTable(5);
    table.setWidthPercentage(100.0f);
    table.setWidths(new float[] {3.0f, 2.0f, 2.0f, 2.0f, 1.0f});
    table.setSpacingBefore(10);
     
    // define font for table header row
    Font font = FontFactory.getFont(FontFactory.HELVETICA);
    font.setColor(BaseColor.WHITE);
     
    // define table header cell
    PdfPCell cell = new PdfPCell();
    cell.setBackgroundColor(BaseColor.BLUE);
    cell.setPadding(5);
     
    // write table row data
    for (upload u : upl) {
        table.addCell(u.getTitle());
        table.addCell(u.getAuthor());
        table.addCell(u.getIsbn());
        table.addCell(u.comments());
        table.addCell(String.valueOf(u.getPrice()));
    }
     
    doc.add(table);
     
}

Отображение, как показано ниже

@RequestMapping(value = "/downloadPDF", method = RequestMethod.GET)
public ModelAndView downloadExcel() {
    // create some sample data
    List<Book> listBooks = new ArrayList<Book>();
    listBooks.add(new Book("Spring in Action", "Craig Walls", "1935182358",
            "June 29th 2011", 31.98F));
    listBooks.add(new Book("Spring in Practice", "Willie Wheeler, Joshua White",
            "1935182056", "May 16th 2013", 31.95F));
    listBooks.add(new Book("Pro Spring 3",
            "Clarence Ho, Rob Harrop", "1430241071", "April 18th 2012", 31.85F));
    listBooks.add(new Book("Spring Integration in Action", "Mark Fisher", "1935182439",
            "September 26th 2012", 28.73F));

    // return a view which will be resolved by an excel view resolver
    return new ModelAndView("pdfView", "listBooks", listBooks);
}

Пожалуйста, дайте мне знать, есть ли способ удалить аннотации из pdf.


person Hitesh    schedule 06.07.2021    source источник
comment
возможно, этот вопрос/ответы может помочь   -  person André Lemos    schedule 06.07.2021
comment
@AndréLemos здесь, у меня еще нет пути к файлу Pdf или сохраненного PDF-файла, я хочу удалить аннотации по мере создания PDF-файла.   -  person Hitesh    schedule 06.07.2021
comment
возможно, после того, как вы создадите PDF-файл в памяти, вы можете передать байт [] в PdfReader (может быть, я не понимаю проблему, извините), а затем манипулировать им.   -  person André Lemos    schedule 06.07.2021
comment
У меня нет доступа к тому, кто может загрузить PDF-файл @AndréLemos (спасибо за предложения), я просто хочу манипулировать данными, чтобы удалить аннотации URL-адресов по мере создания PDF-файла, чтобы человек, который загружает PDF-файл, не есть проблемы с безопасностью   -  person Hitesh    schedule 06.07.2021
comment
ах. вы имеете в виду не аннотации PDF, а href в комментариях?   -  person André Lemos    schedule 06.07.2021
comment
Комментарии представлены в виде строки, которая обычно содержит текст, но если кто-либо добавит URL-адрес к комментариям, а затем пользователь загрузит PDF-файл, это считается потенциальной проблемой безопасности. Когда PDF создается, он автоматически добавляет аннотации к ссылкам, и они становятся интерактивными. Поэтому я хотел найти способ обойти это, чтобы отключить ссылки (если они есть), чтобы пользователь не столкнулся с потенциальной проблемой безопасности (надеюсь, это объясняет, о чем я спрашиваю). Дайте мне знать, если вы ничего не поняли (Я не думаю, что это href, поэтому я подробно объяснил, поправьте меня, если я ошибаюсь).   -  person Hitesh    schedule 06.07.2021
comment
При создании PDF он автоматически добавляет аннотации к ссылкам, и они становятся активными — нет, ни itext, ни сгенерированный pdf автоматически не добавляют аннотации к ссылкам. Программа для просмотра PDF делает! Поэтому, если кто-то считает это проблемой безопасности, он должен отключить эту функцию своего средства просмотра PDF.   -  person mkl    schedule 07.07.2021
comment
Так что нет способа удалить аннотации вокруг URL-адреса, чтобы отключить их в PDF?   -  person Hitesh    schedule 09.07.2021
comment
В случае отсутствия аннотаций (URL-адреса, распознаваемые средством просмотра и отображаемые в виде интерактивных ссылок), вы отключаете их, отключая соответствующую функцию вашего средства просмотра PDF. В случае реальных аннотаций часть вашего кода явно запрашивала создание аннотации ссылки; таким образом, вы можете удалить этот код из своей кодовой базы.   -  person mkl    schedule 11.07.2021
comment
Вы можете попытаться запретить программе просмотра PDF распознавать URL-адреса. Для этого вы должны распознать URL-адреса в своем вводе и каким-то образом изменить их, например. расставив их. Но будьте осторожны, средства просмотра PDF могут со временем изменить свое собственное распознавание URL-адресов и внезапно снова распознать ваши измененные URL-адреса.   -  person mkl    schedule 11.07.2021
comment
Я попробовал шаг интервала @mkl, я заменил table.addCell(u.comments()); с помощью table.addCell(u.comments().replaceAll('://',://));. Когда я это сделал, весь функционал перестал работать. Мало того, если я добавлю какой-либо код в цикл for, функциональность не будет работать, не знаю почему. Если вы считаете, что я делаю что-то не так, пожалуйста, укажите на это, чтобы я поправил.   -  person Hitesh    schedule 17.07.2021