使用ITextSharp编辑PDF格式的超链接和锚点

ash*_*mar 4 pdf editing hyperlink itext

我正在使用iTextSharp库和C#.Net来分割我的PDF文件.

考虑一个名为sample.pdf的PDF文件,其中包含72页.此sample.pdf包含具有导航到其他页面的超链接的页面.例如:在第4页中有三个超链接,当点击时导航到相应的第24,27,28页.与第4页一样,有近12页与它们有这个超链接.

现在使用iTextSharp库我将这个PDF页面分成72个单独的文件,并保存为1.pdf,2.pdf .... 72.pdf.所以在4.pdf中点击超链接我需要让PDF导航到24.pdf,27.pdf,28.pdf.

请帮帮我.如何在4.pdf中编辑和设置超链接,以便导航到相应的pdf文件.

阿谢克谢谢你

Mar*_*rer 6

你想要的是很有可能的.你想要什么将需要你使用低级PDF对象(PdfDictionary,PdfArray等).

每当有人需要使用这些对象时,我总是将它们引用PDF参考.在您的情况下,您将要检查第7章(特别是第3节)和第12章,第3节(文档级导航)和第5章(注释).

假设您已经阅读过,这就是您需要做的事情:

  1. 逐步浏览每个页面的注释数组(在原始文档中,在分解之前).
    1. 查找所有链接注释及其目的地.
    2. 为与新文件对应的链接构建新目标.
    3. 将新目标写入链接注释.
  2. 使用PdfCopy将此页面写入新PDF(它将复制注释以及页面内容).

步骤1.1并不简单.有几种不同的"本地goto"注释格式.您需要确定给定链接指向的页面.某些链接可能表示PDF等效于"下一页"或"上一页",而其他链接则包含对特定页面的引用.这将是"间接对象引用",而不是页码.

要从页面引用中确定页码,您需要... ouch.好的.最有效的方法是为原始文档中的每个页面调用PdfReader.GetPageRef(int pageNum)并将其缓存在地图中(reference-> pageNum).

然后,您可以通过创建远程goto PdfAction并将其写入链接注释的"A"(操作)条目来构建"远程goto"链接,删除之前存在的任何内容(可能是"Dest").

我不太会说C#,所以我会把实际的实现留给你.