从PDF文档删除超链接(iTextSharp)

从PDF文档删除超链接(iTextSharp)

问题描述:

我试图利用iTextSharp(非常新的产品)从PDF文档中删除超链接。有谁知道这是否可能?我一直在挖掘API,并没有找到一个明显的方法来做到这一点。从PDF文档删除超链接(iTextSharp)

我的问题是,我在一个系统上进行维护,这个系统在iframe中嵌入了PDF,并且PDF中的链接导致用户最终浏览iframe中的网站,而不是在新的窗口或标签中我正在寻找一种方法来在请求时终止PDF中的链接。

由于提前, 斯科特

中的链接,点击在给定页的/ Annots阵列注释。

你有两个选择:

  1. 摧毁整个/ Annots阵列
  2. 搜索通过/ Annots阵列并删除所有链接注释

简单的爆破注释阵列很简单:

PdfDictionary pageDict = reader.getPageN(1); // 1st page is 1 
pageDict.remove(PdfName.ANNOTS); 

stamper.close(); 

问题是,你可能会破坏anno你想保持与你没有的那些一起。

解决方案是搜索annot数组寻找URL的链接。

PdfDictionary pageDict = reader.getPageN(1); 
PdfArray annots = pageDict.getAsArray(PdfName.ANNOTS); 
PdfArray newAnnots = new PdfArray(); 
if (annots != null) { 
    for (int i = 0; i < annots.size(); ++i) { 
    PdfDictionary annotDict = annots.getAsDict(i); 
    if (!PdfName.LINK.equals(annotDict.getAsName(PdfName.SUBTYPE))) { 
     // annots are actually listed as PdfIndirectReference's. 
     // Adding the dict directly would be A Bad Thing. 
     newAnnots.add(annots.get(i));// get the original reference, not the dict 
    } 
    } 
    pageDict.put(PdfName.ANNOTS, newAnnots); 
} 

这将删除所有链接注解,而不仅仅是链接到的内部网站。如果您需要深入挖掘,您需要查看PDF Spec,第12.5.6.5节(链接注释)和第12.6.4.7节(URI操作)。

+0

这完全符合我的需要!谢谢你的帮助。 – Scott 2011-05-05 14:07:07