【问题标题】:iTextSharp Add Watermark Only If it Doesn't Already ExistiTextSharp 仅在不存在的情况下添加水印
【发布时间】:2015-10-19 13:14:23
【问题描述】:

有谁知道是否可以使用 iTextSharp 检查 PDF 文档上的水印?

我想在添加新的之前执行此操作。就我而言,如果有人尚未添加新水印,我必须添加它,但我不知道如何使用 iTextSharp 的 PdfReader 类来检查它。 像这样的:

var reader = new PdfReader(bytes);
var stamper = new PdfStamper(reader, ms);
var dc = stamper.GetOverContent(pageNumber);
bool alreadyStamped = cd.CheckIfTextOrImageExists();

【问题讨论】:

  • 这很可能取决于 PDF 类型及其创建方式。大多数 PDF 只是打包的图像文件,在这些情况下,iTextSharp 无法做到这一点。唯一可行的方法是您可以检测 PDF 中的多个图层并在其中一个图层中定位图像。但是,通常在“发布”PDF 时,这些图层会被展平。
  • 首先,有真正的注释水印,只有您个人认为是水印的文本和/或图像。如果您添加了真正的水印,那么您应该能够浏览每个页面的/ANNOTS 字典。见this for a start on that。如果你有任意文本,那么你需要extract text,如果你有图像,那么extract images。另外,水印上的read the comments here
  • 感谢@ChrisHaas 的建议。我将尝试在 PDF 文档中查找特定的单词。那可能行得通。我肯定不会使用图像,只使用纯文本。
  • 在我的案例中使用文本搜索。 codePdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);code

标签: c# .net pdf-generation itextsharp


【解决方案1】:

感谢@ChrisHaas 的评论,经过一番调查,我得以实现该验证。因此,如果特定页面上存在文本,我可以使用 SimpleTextExtractionStrategy 找到它,即使它在 WaterMark 集合中。

PdfReader pdfReader = new PdfReader(bytes);
  for (int page = 1; page <= pdfReader.NumberOfPages; page++)
  {
    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();

    string currentPageText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
    if (currentPageText.Contains(searthText))
    {
      // adding new WaterMark here
      Console.WriteLine("text was found on page "+i);
    }
  }
pdfReader.Close();

希望这种方法可以帮助遇到类似问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多