【问题标题】:Remove hyperlinks from a PDF document (iTextSharp)从 PDF 文档中删除超链接 (iTextSharp)
【发布时间】:2011-08-17 19:58:48
【问题描述】:

我正在尝试利用 iTextSharp(对产品来说非常新)从 PDF 文档中删除超链接。有谁知道这是否可能?我一直在研究 API,但没有找到明显的方法。

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

提前致谢, 斯科特

【问题讨论】:

    标签: c# pdf itextsharp hyperlink


    【解决方案1】:

    人们点击的链接是给定页面的 /Annots 数组中的注释。

    你有两个选择:

    1. 销毁整个 /Annots 数组
    2. 搜索 /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 Spec,第 12.5.6.5 节(链接注释)和第 12.6.4.7 节(URI 操作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 2021-02-21
      • 2011-07-18
      • 2020-01-18
      • 2016-06-02
      • 2013-10-29
      • 2011-06-22
      • 1970-01-01
      相关资源
      最近更新 更多