【问题标题】:How to Navigate from one page to another page in same PDF file using links in IText?如何使用 IText 中的链接从同一 PDF 文件中的一页导航到另一页?
【发布时间】:2019-02-21 06:49:37
【问题描述】:

我有 2 个 PDF 文件,一个 PDF 文件是使用 Apache FOP 创建的,另一个 PDF 文件是通过转换 word 文档创建的。我需要使用 IText 将这两个 PDF 合并到单个 PDF 文件中,这已经完成。除此之外,我需要在我的第一个 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();
 }

提前感谢您的帮助!

【问题讨论】:

  • 首先,您使用PdfStamper 类,所以我假设您使用iText 5.x(或更低版本)。这个假设正确吗?此外,我假设您已经有一个完成的 PDF 文档,并且必须在之后添加链接,并且无法在初始文档创建期间添加链接。正确的?在这种情况下,您想要点击的文本是否已经在现有 PDF 中?还是您希望将其添加到您的任务中?
  • 是的,我希望它成为任务的一部分,是的,我正在使用 i text 5.x
  • 如果您将文本添加为​​任务的一部分,您就知道将其添加到何处。那么确定文本坐标的问题在哪里呢?
  • @mkl 抱歉,我的疑问有些混乱,我已经编辑了我的问题
  • 好的,我发现仍然存在误解 - pdf 中的链接是您为代码找到的那种链接:某些区域的链接注释。因此,您不需要将该字符串替换为链接,您只需在其上放置一个链接注释即可。

标签: java itext pdf-generation


【解决方案1】:

您可以为此使用Chunk 类。我想你会从this link得到答案。

您也可以为此使用命名操作,例如您可以在 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

【讨论】:

  • OP 使用 iText 5.x(或更低版本)。因此,您的回答可能无济于事(除非 OP 切换版本)。
猜你喜欢
  • 1970-01-01
  • 2013-11-28
  • 2020-08-13
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
相关资源
最近更新 更多