1

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

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

    page.GetAsArray(PdfName.CONTENTS);

为我返回 null,在使用PdfName.Text和我尝试过的其他一些时也是如此。

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

编辑:只是为了弄清楚为什么我要从 pdf 中删除所有文本

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

4

3 回答 3

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

请阅读ISO-32000-1以找出您做错了什么。

于 2012-10-02T09:13:20.740 回答
1

现在您已经更新了您的问题,并揭示了预期措施的动机,让我告诉您真相:

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

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

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

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

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

这根本不是一个好计划。

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

于 2012-10-03T11:54:56.563 回答
0

To remove all text in a PDF, the easiest solution is using ghostcript

gs -o output_no_text.pdf -sDEVICE=pdfwrite -dFILTERTEXT  input.pdf
于 2016-10-05T14:35:44.887 回答