从PDF中删除文本
我正在寻找一个解决方案来删除/删除PDF格式的所有文本。 我一直在使用iTextSharp一段时间了,用pdf从中提取文本很容易(使用OCR)。 但是我找不到删除文本的选项。
坦白说, 这个解决方案对我不起作用。
page.GetAsArray(PdfName.CONTENTS);
对我来说返回null,也是在使用PdfName.Text
和其他一些我尝试过的时候。
使用的库并不重要,我只是认为iTextsharp应该能够做到这一点。 但是,如果有另一个(免费)解决方案,请带上它
编辑: 只是为了明确我为什么要从pdfs中删除所有文本
我想减小pdf的大小。 我这样做是通过降低pdf中图像的分辨率来实现的。 然而,在很多情况下,矢量图像占据了大部分空间。 所以我想到了以下内容:删除所有文本,而不是将剩余的pdf(仅包含图像和向量)转换为位图(jpeg)。 之后,我再次将文本粘贴在上面。 另一个选择是使文本不可见,但我认为这不容易。
- 页面字典的
/Contents
并不总是由数组组成。 很明显,如果内容存储为流,则GetAsArray()
返回null
。 - 假设您使用
GetAsStream()
并从流中删除所有文本内容,那么您可能仍然在XObjects中有文本内容。 该文本不会从内容流中引用,但iText将无法将XObject删除为“未使用的对象”,因为仍将从页面字典中的/Resources
引用对象。
请阅读ISO-32000-1以了解您的错误。
现在你已经更新了你的问题,并揭示了预期措施的动机,让我说实话:
-
这些措施绝不会减少 PDF的大小。
-
相反,它们会导致文件大幅增加:
-
首先删除文字+字体可能会导致尺寸略有缩小,是的。
-
然后将页面的剩余部分转换为位图肯定会大大增加尺寸(或者你同意非常低的图像质量,也许?)。
-
最后再次“粘贴”文本将再次增加文件大小(很可能与您在第一步中保存的数量相同)。
-
这根本不是一个好计划。
如果您提供(链接)您的典型示例PDF文件之一,我可能会想出一个开箱即用的Ghostscript(以及其他工具)命令行,并且可以更有效地缩小PDF大小。
要删除PDF中的所有文本,最简单的解决方案是使用ghostcript
gs -o output_no_text.pdf -sDEVICE=pdfwrite -dFILTERTEXT input.pdf