我想做OCR的反面,我不想把图片转成文字,我想把PDF中的所有文字都转成图片,这样就不能随便选择和复制了。
在 Acrobat Pro 中很好,但我真的很喜欢可以从 Linux 命令行使用的东西,因为我有很多这些 PDF 要做,而且它们目前在网站上。如果我可以在服务器上进行此更改,它将为我节省数小时的下载、在 Acrobat 中处理、重新上传需要通过我的 CMS 界面完成的工作,这非常慢。
因此,如果有一些可以轻松完成此操作的 PDF 工具,我可以从终端使用,那将非常棒。
我想您的目标是使从 PDF 中选择和复制文本变得更加困难。因为这是您可以提出的唯一可实现的目标。(如果有一种方法可以在屏幕上查看 PDF 页面,那么有一种方法可以以某种方式访问文本或图像内容,尽管这比复制和粘贴更困难......我猜你是意识到这一点。)
您有三个选择:
如果使用正确的工具,这 3 种方法中的每一种都非常容易应用。:-)
对于这些方法中的每一种,您都可以在命令行上使用免费和开源软件工具。 (这些工具中的每一个都可用于 Linux、Mac OSX、Unix 或 Windows。)
请参阅下面对每种方法的更详细讨论。
convert)您可以像这样使用ImageMagick的convert命令:
convert \
pdf-with-fonts.pdf \
pdf-with-images.pdf
Run Code Online (Sandbox Code Playgroud)
ImageMagick 只能直接处理光栅图像,不能处理任何其他格式。由于它不能直接处理 PDF,它会自动使用Ghostscript作为其委托。因此也需要安装 Ghostscript!Ghostscript 将创建所需的光栅图像作为 ImageMagick 的输入。
您可以通过-verbose在命令行中添加switch 来观察使用 Ghostscript 作为后台进程的 ImageMagick 进程。
默认情况下,convert将使用 72ppi 的分辨率。这可能不足以很好地阅读(但通过将OCR 软件应用于输出来规避您的“保护”会困难得多。)

上图显示了使用 ImageMagick 在 600% 缩放级别使用的默认分辨率 (72 PPI) 创建的像素化 PDF 页面的屏幕截图。如果您需要更好的分辨率,比如 200 PPI,请-density 200在命令行中添加参数:
convert \
-density 200 \
pdf-with-fonts.pdf \
pdf-with-images.pdf
Run Code Online (Sandbox Code Playgroud)

上图显示了由 ImageMagick 创建的像素化 PDF 页面的镜头(也在 600% 缩放级别),分辨率为 200 PPI。
请注意,当我使用默认分辨率 72 PPI 测试上述命令时,包含所有文本且大小为 1 MB 的 219 页 PDF 会生成 23 MB 的输出文件。在 MacBook 上生成大约需要 2 分钟。200ppi 的 PDF 大小为 110 MB,需要 11 分钟才能准备好...
如果分辨率足够好,很容易避免页面像素化:OCR 可以正常工作。在低分辨率下,它对于人类来说仍然是可读的(和可猜测的),但机器很难得出好的 OCR 结果。
您可以使用最新、最新、最伟大的 Ghostscript 版本。那是版本 v9.15。使用gs -version.
最新版本 v9.15 包含一个新的命令行参数--dNoOutputFonts. 此参数会将所有字形形状转换为轮廓并删除所有嵌入的字体:
gs \
-o pdf-with-outlines.pdf \
-sDEVICE=pdfwrite \
pdf-with-fonts.pdf
Run Code Online (Sandbox Code Playgroud)
在我的测试中,同样的 219 页 PDF(大小为 1 MByte)转换为 186 MByte 的输出文件,转换需要 6 分钟。
轮廓的优点是页面文本保持清晰锐利且无像素化,您可以在不丢失清晰度的情况下放大任何级别的文本。您可以在下一个屏幕截图中看到这一点:

缺点是文件的大小。(顺便说一句,我使用 Adobe Acrobat Pro XI 测试了相同的方法,将文本转换为轮廓,结果文件大小为 61 MB,需要 15 分钟的处理时间。)
绕过这个措施很容易:OCR 会很好地工作。
qpdf)鲜为人知的是,您可以使用空密码(“用户”和“所有者”密码)“保护”或(“加密”)PDF 。这允许所有 PDF 阅读器/查看器软件在不要求密码的情况下打开文件,仅在尝试从页面复制文本或尝试打印文件时弹出密码对话框。
QPDF 对此有很好的支持:
qpdf \
--encrypt "" "" 40 \
--print=n \
--modify=n \
--extract=n \
-- \
uncrypted.pdf \
crypted.pdf
Run Code Online (Sandbox Code Playgroud)
所有这些命令选项是什么意思?
--encrypt "" "" 40:
这会将密码(用户和所有者)设置为空字符串,并将密钥长度设置为 40 位。
--print=n:
这将禁用 PDF 的打印。
--modify=n:
这将禁用 PDF 的修改。
--extract=n:
这将禁用 PDF 的文本和图像提取。
--:
这是表明加密选项结束所必需的。
如果您使用 128 或 256 位密钥长度,QPDF 有更多(和不同)详细选项可用。其他可用选项包括--modify=[annotate|form|assembly]允许填写表格、添加注释或将文档与其他 PDF 组合在一起(同时仍然不允许复制“粘贴”或打印)。
这个命令
qpdf --show-encryption crypt.pdf
Run Code Online (Sandbox Code Playgroud)
将显示有关任何文件“加密”设置的详细信息。例子:
extract for accessibility: not allowed
extract for any purpose: not allowed
print low resolution: not allowed
print high resolution: not allowed
modify document assembly: not allowed
modify forms: allowed
modify annotations: allowed
modify other: not allowed
modify anything: not allowed
Run Code Online (Sandbox Code Playgroud)

顺便说一句:在上面显示的两个对话框中将密码留空对(大多数?或全部?尚未测试...)PDF 查看器没有帮助。它仍然无法解锁以复制或打印。
这种方法的优点在于它的快速执行和几乎相同的文件大小。
当然,再次删除“加密”同样容易:
qpdf --decrypt crypted.pdf decrypted.pdf
Run Code Online (Sandbox Code Playgroud)
为了快速获得结果、相同的文件大小以及易于移除的针对“随意” 选择和复制文本的保护,请使用带有空密码的“保护”/“加密”。
对于缓慢的结果,以及潜在的巨大文件大小(但并不总是好看的页面)和更多移除保护的工作,请对所有页面使用像素化。
对于更慢的结果(但总是更好看的页面)以及更多的工作来移除保护,请使用所有文本的矢量轮廓方法。
请始终注意,所有这些方法都不能绝对保护您的 PDF 页面的内容。它们只会使提取更加不便。
似乎您最好的选择是使用ImageMagick从命令行将 PDF 转换为大多数类型的图像。这个站点提供了一些关于如何使用 PHP 和 ImageMagick 来自动化这个任务的不错的细节。但在最基本的层面上,该站点解释了从终端命令行执行此操作的基础知识:
convert my_great_file.pdf my_great_file.png
Run Code Online (Sandbox Code Playgroud)
要将输出格式从 PNG 更改为 JPEG,只需像这样更改目标文件名的文件扩展名:
convert my_great_file.pdf my_great_file.jpg
Run Code Online (Sandbox Code Playgroud)
您的情况的诀窍是您需要确保您的托管服务已安装 ImageMagick。如果没有,他们是否愿意安装它。根据我的经验,ImageMagick 是一个非常常用的工具,它应该在那里。唯一潜在的“问题”是安装不是通过内置的 PDF 支持完成的。但那是你要弄清楚和处理的。
此外,如果您从 PDF 创建单独的图像文件,则可以很容易地使用这些图像文件创建新的 PDF,如下所示:
convert *.jpg my_new_great_file.pdf
Run Code Online (Sandbox Code Playgroud)
此外,似乎convert可以通过简单地将最终产品光栅化来直接将 PDF 转换为 PDF:
convert my_great_file.pdf my_new_great_file.pdf
Run Code Online (Sandbox Code Playgroud)
这将生成具有 72 dpi 光栅化输出的 PDF。如果需要,您可以使用如下-density选项进行调整:
convert -density 144 my_great_file.pdf my_new_great_file.pdf
Run Code Online (Sandbox Code Playgroud)
这将创建一个由 144 dpi 的光栅化图像组成的新 PDF。