这是一个 OCR 出错的案例。我需要从 PDF 中删除隐藏文本,但我很难弄清楚如何做到这一点。
隐藏文本位于始终名为/QuickPDFsomething 的区域中,该区域位于页面的/Resources 字典中的/XObject 字典下方。
我已经尝试过这两件事,但都不起作用,所以我显然做错了什么。
选项 1 - 终止 obj - PDF 无法在 Acrobat 中打开,并指出“此页面存在错误”。 Acrobat 可能无法正确显示页面,但看起来没问题。 Pitstop 出现“严重解析器故障:XObject 资源丢失”的情况。
PdfReader.KillIndirect(obj);
oPdfFile.GetPdfReader().RemoveUnusedObjects();
var stamper = new PdfStamper(oPdfFile.GetPdfReader(), new FileStream(@"C:\temp.pdf", FileMode.Create));
stamper.Close();
选项 2 - CleanupProcessor - 引发有关“无法从具有索引像素格式的图像创建图形对象”的异常。
var stamper = new PdfStamper(oPdfFile.GetPdfReader(), new FileStream(@"C:\temp.pdf", FileMode.Create));
var cleanupLocations = new List<PdfCleanUpLocation>();
var pageRect = oPdfFile.GetPdfReader().GetCropBox(1);
cleanupLocations.Add(new PdfCleanUpLocation(1, pageRect));
PdfCleanUpProcessor cleaner = new PdfCleanUpProcessor(cleanupLocations, stamper);
cleaner.CleanUp();
stamper.Close();
我想删除/QuickPDF 对象(在此图像中为 41 0 R),并将其从使用/QuickPDF Do 调用它的内容流中删除。
很遗憾,我无法提供 PDF。
关于如何执行此操作有任何提示吗?
最佳答案
我不想回答自己的问题,但我想分享我找到的解决方案,以防其他人需要。
经过几天的研究,我发现上面的选项 1 确实会删除该对象,而我从 PitStop 得到的异常是因为内容流引用了/QuickPDF XObject。
所以我尝试在这里遵循@mkl的解决方案Removing Watermark from PDF iTextSharp但它不断将不需要的数据放入旋转我的 PDF 的内容流中。
然后我在这里找到了@Chris的解决方案Removing Watermark from a PDF using iTextSharp尽管我不确定这个解决方案有多稳定,但它似乎有效。
这是我从内容流中删除/QuickPDF 的解决方案:
int numPages = oPdfFile.GetPdfReader().NumberOfPages;
int pgNumber = 1;
PdfDictionary page = oPdfFile.GetPdfReader().GetPageN(pgNumber);
PdfArray contentarray = page.GetAsArray(PdfName.CONTENTS);
PRStream stream;
string content;
if (contentarray != null)
{
//Loop through content
for (int j = 0; j < contentarray.Size; j++)
{
stream = (PRStream)contentarray.GetAsStream(j);
content = Encoding.ASCII.GetString(PdfReader.GetStreamBytes(stream));
string[] tokens = content.Split('\n');
for (int i = 0; i< tokens.Length; i++)
{
if (tokens[i].Contains("/QuickPDF"))
{
tokens[i] = string.Empty;
}
}
string outstr = string.Join("\n", tokens.Select(p => p).ToArray());
byte[] outbytes = Encoding.ASCII.GetBytes(outstr);
stream.SetData(outbytes);
}
}
关于pdf - 使用 iTextSharp 删除 PDF 中的对象并保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39251209/