首页 > 解决方案 > 删除 iText 从第 3 方应用程序中加盖的水印

问题描述

为了给您提供上下文,我正在尝试从某些 3rd 方应用程序生成的 pdf 中删除水印。我正在尝试使用 iText7 编写一个实用程序,它将检测此类水印并将其删除。

这是 pdf 文件示例https://easyupload.io/54zhzs。我要删除的突出显示的水印文本。

在此处输入图像描述

我最初认为它可以作为注释添加,但我收到annots为空。如果有注释集合,我可以检查并删除此注释。当我们用 iText 本身标记注释时,这很有效,但情况并非如此。

 PdfDocument pdfDoc = new PdfDocument(new PdfReader(filePath), new PdfWriter(destinationfile));
 for (var i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
 {
    PdfDictionary pageDict = pdfDoc.GetPage(i).GetPdfObject();
    PdfArray annots = pageDict.GetAsArray(PdfName.Annots);
    if (annots != null)          
    {
           for (int j = 0; j < annots.Size(); j++)
           {
                 PdfDictionary annotation = annots.GetAsDictionary(j); 
                 if (PdfName.Watermark.Equals(annotation.GetAsName(PdfName.Subtype)))
                 {
                     annotation.Clear();
                 }                        
           }
     }
  }
 pdfDoc.Close();

接下来,在第二种方法中,我试图获得PdfObject类似的东西,但我在这里不知道如何识别我想要删除的正确对象。

PdfDictionary pageDict = pdfDoc.GetFirstPage().GetPdfObject();
PdfArray fields = pageDict.GetAsArray(PdfName.Fields);
PdfDictionary resources = pageDict.GetAsDictionary(PdfName.Resources);
PdfArray xObjects = resources.GetAsArray(PdfName.ProcSet);
foreach (PdfObject obj in xObjects)
{
   // not sure what to do from here
}

这是我得到的调试结果。我认为在最后一个 ProcSet 中,这个水印是一个图像层,但我不确定如何识别它。

在此处输入图像描述 我在正确的轨道上还是有其他解决方案?

标签: pdfitextitext7

解决方案


推荐阅读