Sco*_*ott 1 c# pdf hyperlink itextsharp
我正在尝试利用 iTextSharp(该产品非常新)从 PDF 文档中删除超链接。有谁知道这是否可能?我一直在挖掘 API,但还没有找到一种明显的方法来做到这一点。
我的问题是我正在对一个系统进行维护,该系统在 iframe 中嵌入了 PDF,并且 PDF 中的链接导致用户最终在 iframe 中而不是在新窗口或选项卡中浏览网站,所以我正在寻找一种在请求时终止 PDF 中链接的方法。
提前致谢,斯科特
人们点击的链接是给定页面的 /Annots 数组中的注释。
您有两个选择:
简单地爆破注释数组很容易:
 PdfDictionary pageDict = reader.getPageN(1); // 1st page is 1
 pageDict.remove(PdfName.ANNOTS);
 stamper.close();
问题在于,您可能会破坏想要与不想要的注释一起保留的注释。
解决方案是搜索 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 规范12.5.6.5 节(链接注释)和 12.6.4.7 节(URI 操作)。