从PDF中删除文本

我正在寻找一个解决方案来删除/删除PDF格式的所有文本。 我一直在使用iTextSharp一段时间了,用pdf从中提取文本很容易(使用OCR)。 但是我找不到删除文本的选项。

坦白说, 这个解决方案对我不起作用。

page.GetAsArray(PdfName.CONTENTS); 

对我来说返回null,也是在使用PdfName.Text和其他一些我尝试过的时候。

使用的库并不重要,我只是认为iTextsharp应该能够做到这一点。 但是,如果有另一个(免费)解决方案,请带上它

编辑: 只是为了明确我为什么要从pdfs中删除所有文本

我想减小pdf的大小。 我这样做是通过降低pdf中图像的分辨率来实现的。 然而,在很多情况下,矢量图像占据了大部分空间。 所以我想到了以下内容:删除所有文本,而不是将剩余的pdf(仅包含图像和向量)转换为位图(jpeg)。 之后,我再次将文本粘贴在上面。 另一个选择是使文本不可见,但我认为这不容易。

  1. 页面字典的/Contents并不总是由数组组成。 很明显,如果内容存储为流,则GetAsArray()返回null
  2. 假设您使用GetAsStream()并从流中删除所有文本内容,那么您可能仍然在XObjects中有文本内容。 该文本不会从内容流中引用,但iText将无法将XObject删除为“未使用的对象”,因为仍将从页面字典中的/Resources引用对象。

请阅读ISO-32000-1以了解您的错误。

现在你已经更新了你的问题,并揭示了预期措施的动机,让我说实话:

  • 这些措施绝不会减少 PDF的大小。

  • 相反,它们会导致文件大幅增加:

    1. 首先删除文字+字体可能会导致尺寸略有缩小,是的。

    2. 然后将页面的剩余部分转换为位图肯定会大大增加尺寸(或者你同意非常低的图像质量,也许?)。

    3. 最后再次“粘贴”文本将再次增加文件大小(很可能与您在第一步中保存的数量相同)。

这根本不是一个好计划。

如果您提供(链接)您的典型示例PDF文件之一,我可能会想出一个开箱即用的Ghostscript(以及其他工具)命令行,并且可以更有效地缩小PDF大小。

要删除PDF中的所有文本,最简单的解决方案是使用ghostcript

 gs -o output_no_text.pdf -sDEVICE=pdfwrite -dFILTERTEXT input.pdf