6

我想使用任何可能的命令行工具删除/删除 PDF 中的所有图像,只留下 PDF 中的文本/字体。

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

4

5 回答 5

21

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

cpdf -draft in.pdf -o out.pdf

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

披露:我是 cpdf 的作者。

于 2013-12-20T11:23:22.843 回答
12

时光荏苒,Ghostscript 的发展也在进步……

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

  1. -dFILTERIMAGE:产生一个输出,其中所有光栅图都被删除。

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

  3. -dFILTERVECTOR:产生一个输出,其中所有矢量图都被删除。

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

示例命令:

gs -o noimage.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf

更多详细信息(包括一些说明性屏幕截图)可以在我对“如何从 PDF 中删除所有图像?”的回答中找到。.

于 2016-06-16T16:33:07.410 回答
4

不,AFAIK,不可能使用命令行工具删除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

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

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


更新:最初,我建议使用 1 PPI 的分辨率。看来这不适用于 Ghostscript。我现在用 2 PPI 进行了测试。这行得通。


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

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

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

于 2013-12-19T12:38:04.387 回答
2

要将图像和文本分隔到不同的图层,遗憾的是没有可用的免费/开源软件实用程序。也不是免费的啤酒……

这项任务只能通过各种付费软件解决方案来完成。由于您没有在问题中排除这一点,但您要求使用'whatever commandline tool possible',我会告诉您我最喜欢的一个:

有一个 CLI 使用版本(包括一个强大的 SDK,支持大量低级 PDF 操作),所有主要操作系统平台都支持该版本,包括 Linux。

callas 为您提供功能齐全的免费测试许可证(我相信)启用 14 天。

于 2013-12-19T18:20:23.580 回答
0
 gs -o noImages.pdf   -sDEVICE=pdfwrite -dFILTERIMAGE                input.pdf
 gs -o noText.pdf   -sDEVICE=pdfwrite -dFILTERTEXT                 input.pdf
 gs -o noVectors.pdf   -sDEVICE=pdfwrite -dFILTERVECTOR               input.pdf
 gs -o onlyImages.pdf -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERTEXT  input.pdf
 gs -o onlyText.pdf -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERIMAGE input.pdf
 gs -o onlyVectors.pdf -sDEVICE=pdfwrite -dFILTERIMAGE  -dFILTERTEXT  input.pdf
于 2021-12-30T04:51:44.297 回答