pdf - 删除 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 中,这个水印是一个图像层,但我不确定如何识别它。
解决方案
推荐阅读
- delphi - 打开子窗体后,TeeChart OnMouseDown 在父窗体上触发 FormActivate
- r - 汇总多个必须分组的列 tidyverse
- xamarin.forms - 翻译视图后,它应该滚动全部内容,如果没有,它应该裁剪隐藏部分的内容
- reactjs - createAsyncThunk 引发错误,但案例拒绝不会被触发
- c# - CAML 查询返回没有过滤器的记录
- google-sheets - 结合 arrayformula() 与 index() & match()
- kubernetes - 将 Openshift 路由转换为 Kubernetes Ingress
- prolog - 如何为数字计数谓词实例化 Y?
- angular - Angular 中的 AES 加密密钥存储在哪里?
- node.js - 将项目从一个模式推送到另一个模式