Как перейти с одной страницы на другую в том же файле PDF, используя ссылки в IText? - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть 2 PDF-файла, один PDF-файл создается с использованием Apache FOP, а другой PDF-файл создается путем преобразования текстового документа.Мне нужно объединить оба этих PDF-файла в один PDF-файл, используя IText, что уже было сделано.В дополнение к этому мне нужно создать ссылку в моем первом PDF-файле, которая приведет меня на первую страницу второго PDF-файла, который был объединен.

Проблема здесь в том, что мне нужно создать ссылку из первого PDF-файла путем поиска строки / текста, например «Перейти на страницу», если я нахожу эту строку в своем первом PDF-файле, мне нужно заменить эту строкув виде ссылки, и при нажатии на эту ссылку мне нужно перейти на нужную страницу.

Приведенный ниже код фактически выполняет работу по переходу по страницам за меня, но я не могу сделать это, создав ссылкусогласно моему требованию.

Можно ли найти прямоугольные координаты строки / текста, чтобы я мог передать эти координаты, чтобы создать ссылку?Или есть ли способ заменить мою строку как ссылку, используя itext?

Я использую IText 5.x

 public void pdfNavigation(String src, String dest) throws IOException, DocumentException 
{
  PdfReader reader = new PdfReader(src);
  PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
  PdfDestination d1 = new PdfDestination(PdfDestination.FIT);
  Rectangle rect = new Rectangle(0, 806, 595, 842);
  PdfAnnotation annotation1= PdfAnnotation.createLink(stamper.getWriter(), 
  rect, 
  PdfAnnotation.HIGHLIGHT_INVERT, 10, d1);
  stamper.addAnnotation(annotation1, 1);
  PdfDestination d2 = new PdfDestination(PdfDestination.FIT);
  PdfAnnotation annotation2= PdfAnnotation.createLink(stamper.getWriter(), 
  rect, 
  PdfAnnotation.HIGHLIGHT_PUSH, 1, d2);
  stamper.addAnnotation(annotation2, 4);
  stamper.close();
 }

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете использовать Chunk класс для этого.Я думаю, что вы получите ответ от по этой ссылке .

. Для этого вы также можете использовать именованные действия, например, приведенный ниже код, который вы можете найти в документации iTEXT (ссылка приведена ниже).

Paragraph p = new Paragraph()
    .add("Go to last page")
    .setAction(PdfAction.createNamed(PdfName.LastPage));
document.add(p);
p = new Paragraph()
    .add("Go to first page")
    .setAction(PdfAction.createNamed(PdfName.FirstPage));
document.add(p);

https://itextpdf.com/en/resources/books/itext-7-building-blocks/chapter-6-creating-actions-destinations-and-bookmarks

https://itextpdf.com/en/resources/examples/itext-7/chapter-6-actions-destinations-bookmarks#2568-c06e02_namedaction.java

...