使用Ghostscript或ImageMagick删除/删除PDF中的所有图像

cod*_*din 6 pdf poppler imagemagick ghostscript

我想删除/删除PDF中的所有图像,只留下PDF中的文本/字体,无论使用什么命令行工具.

我尝试-dGraphicsAlphaBits=1在Ghostscript命令中使用,但图像存在,但像一个大像素.

小智 19

您可以使用cpdf的草稿选项:

cpdf -draft in.pdf -o out.pdf
Run Code Online (Sandbox Code Playgroud)

这应该适用于大多数情况,但如果它没有为您做正确的事情,请提交错误报告.

披露:我是cpdf的作者.

  • 谢谢,这很安静,它成功地删除了PDF格式的所有图像.接下来,我尝试使用命令`cpdf -remove-fonts in.pdf -o out.pdf`从pdf中删除字体,但它会留下损坏的字体/黑色blob.会调查一下. (2认同)

Kur*_*fle 6

时间过去了,Ghostscript的开发已经取得了进展......

最新版本具有以下新命令行参数.这些可以添加到命令行:

  1. -dFILTERIMAGE:生成一个输出,其中删除所有光栅图形.

  2. -dFILTERTEXT:生成一个输出,其中删除所有文本元素.

  3. -dFILTERVECTOR:生成一个输出,其中删除所有矢量绘图.

可以组合这些选项中的任何两个.

示例命令:

gs -o noimage.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf
Run Code Online (Sandbox Code Playgroud)

更多细节(包括一些说明性的截图)可以在我的答案"如何从PDF中删除所有图像?"中找到..


Kur*_*fle 4

不,据我所知,使用命令行工具不可能删除PDF 中的所有图像。

无论如何,您的请求的目的是什么?保存文件大小?删除图像中包含的信息?或者 ...?

解决方法

无论您的目标是什么,这里都有一个命令,可以将所有图像采样到 2 ppi 的分辨率(更新: 1 ppi 不起作用)。它同时实现了两个目标:

  • 减少文件大小
  • 使所有图像基本上无法理解

以下是如何选择性地执行此操作,针对第 33 页上的图像original.pdf

gs                               \
  -o images-uncomprehendable.pdf \
  -sDEVICE=pdfwrite              \
  -dDownsampleColorImages=true   \
  -dDownsampleGrayImages=true    \
  -dDownsampleMonoImages=true    \
  -dColorImageResolution=2       \
  -dGrayImageResolution=2        \
  -dMonoImageResolution=2        \
  -dFirstPage=33                 \
  -dLastPage=33                  \
   original.pdf
Run Code Online (Sandbox Code Playgroud)

如果您想对所有页面上的所有图像执行此操作,只需跳过和参数即可。-dFirstPage-dLastPage

如果您想从图像中删除所有颜色信息,请在同一命令中将它们转换为灰度(在 Stackoverflow 上搜索其他答案,其中讨论了详细信息)。


更新:最初,我建议使用 1 PPI 的分辨率。这似乎不适用于 Ghostscript。我现在用 2 PPI 进行测试。这有效。


更新 2:另请参阅以下(新)问题及其答案:

它提供了一些示例 PostScript 代码,可以从 PDF 中完全删除所有(光栅)图像,而页面布局的其余部分保持不变。

它还反映了 Ghostscript 的扩展新功能,现在可以有选择地删除 PDF 中的所有文本、所有光栅图像、所有矢量对象,或者这 3 种类型的任意组合。