如何将我的 .PDF(两页)压缩到 100 kB 以下?

Pra*_* M. 10 pdf convert printing scanner

我有一个 PDF 文件,我想将其压缩到 100 kB 以下。它扫描了我从移动扫描仪扫描的两页。扫描后为 338 kB(以最低质量查看页面)。基本上我想将此文件上传到政府门户网站,该门户网站仅允许在一个文件中上传最多 100 kB。这是我的主要目的。以下是我现在尝试过的方法,但它没有完成所需的任务:

  • 使用Ghostscript周围的简单包装器来缩小 PDF 文件“ ./shrinkpdf.sh in.pdf out.pdf xx”。我将 xx 设置为 90,它给了我 282 kB。低于 90 值,PDF 文档中的文本不清晰,我确信我的申请会被拒绝。

  • 我还尝试了“ gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=setting -sOutputFile=output.pdf input.pdf”,将值设置为 /screen,我认为这是最小设置,它给了我 232 kB 并且文本相当明显。

  • 我还尝试使用“pdftoppm”方法将其转换为 JPEG,例如“ pdftoppm compressed.pdf jpeg -r 75 -jpeg”,它为我提供 141 kB 的 1 页和 128 kB 的第 2 页。我不确定如何将这两个 JPEG 文件作为一个文件上传,但是我想我的主要目标现在应该是先让它小于 100 kB?

我使用 Ubuntu 20.04.2。

vid*_*rlo 25

低于 90 值,pdf 中的文本不清晰,我确信我的申请会被拒绝。

这是一个扫描的文件。这意味着它不是文本,而是页面的图像。PDF 支持多种图像压缩方案,包括无损,但质量和降级表明您使用的是 JPEG。

这可能是最有效的存储方式。

您想在 <100kB 中存储两个页面。这是每页 50kB。这是一项艰巨的任务——但可能是可能的。

我会将页面导出为 JPG 并调整质量设置和分辨率,直到得到结果:

convert file.pdf file.jpg
Run Code Online (Sandbox Code Playgroud)

这将分别为您提供第 1 页和第 2 页的 file-0.jpg 和 file-1.jpg。

现在我们可以尝试降低页面的分辨率:

mogrify -resize 600x700 -quality 45 file-0.jpg
Run Code Online (Sandbox Code Playgroud)

通过这种措施,我设法将 A4 页面缩小到 28kB。它清晰易读,但不是很清楚:

图片不清晰

要将文件在播放后将其转换回 PDF 以减小大小,请运行

convert file-?.jpg file.pdf
Run Code Online (Sandbox Code Playgroud)

除了mogrify来修改文件,还可以使用gimp等工具。

  • 另一个尝试的选择是重新采样以更改 DPI。扫描仪可能已设置为像 600x600 这样的高 DPI,而 200x200 之类的东西就足够了。 (6认同)
  • 这 [基本上与调整大小相同](/sf/answers/915503501/),并且不会对调整大小不会做的文件大小做任何事情。但是,它可能会影响图片的呈现方式。 (3认同)

chi*_*NUT 14

由于文件大小优化的扫描文档可能是黑白的,因此.pbm是一种单色位图格式,似乎非常适合此格式,您可以将其转换回 png 以嵌入 pdf。

使用示例文档1 (imgur 永久链接:https ://i.imgur.com/Ak2kVGD.jpg )

原始文件

它是文档的 1751x2451 jpg 扫描件,大小为 1.71MB,黑白,带有一些蓝色调

convert document_scanner_sample_scan_00_zoom.jpg -resize 1000 intermediate.pbm
convert intermediate.pbm page1.png # 1000x1436, 46kb
Run Code Online (Sandbox Code Playgroud)

page1.png 看起来很适合46kb ( https://i.imgur.com/gYwtipQ.png )

优化文档

正如评论中指出的那样,png 需要转码才能嵌入到 pdf 中。默认情况下convert使用/FlateDecodepdf 压缩格式 ( convert page1.png page1.pdf),生成的 pdf 为 67kb。改用/CCITTFaxDecode用于单色图像的格式,将其降低到 57kb

convert page1.png -alpha off -monochrome -compress fax page1.pdf
Run Code Online (Sandbox Code Playgroud)

有关命令行选项到 pdf 压缩格式的映射,请参阅 image magick 文档:https : //legacy.imagemagick.org/Usage/formats/#pdf_compression

有关 pdf 压缩过滤器的文档,请参阅 pdf 参考(版本 1.7)的第 7.4 节。第 7.4.1 节表 6 中提供了介绍。

https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf


1. 原始示例文件在这里找到:

https://s1-www.scan2docx.com/img/samples/document_scanner_sample_scan_00_zoom.jpg

  • @AmedeeVanGasse 您可以对单色图像使用`/CCITTFaxDecode` 过滤器将 pdf 降低到 57kb,请参阅更新的答案 (2认同)

Pra*_* M. 7

谢谢大家帮助我!谢谢@vidarlo!您的建议和想法确实帮助我度过了难关,而且一点运气也起到了作用。我会将您的输入标记为解决方案,因为它确实有助于此任务。

对我来说幸运的是政府网站允许我们分别上传两个 100kb 的文件。这是没有提到的地方!它仅在上传一页的站点帖子中显示第二个对话框。哇!

所以现在的想法是将每个页面压缩到 100kb 以下。我决定分别扫描每一页:

第 1 页 144kb.pdf 和第 2 页 165kb.pdf

我发现(至少对于我的文档)convert file.pdf file.jpg性能低于pdftoppm file.pdf jpeg -r 75 -jpeg. 我不知道为什么,但 convert 的输出给了我 258kb.jpg 的第一页(144kb.pdf),而从 pdftoppm 它给了我 130.6kb .jpg 的同一页,但一个更好看的 jpeg 文件!我决定继续这样做。

pdftoppm 144kb.pdf jpeg -r 75 -jpeg  --> 130.6kb.jpg
pdftoppm 165kb.pdf jpeg -r 75 -jpeg  --> 134.4kb.jpg
Run Code Online (Sandbox Code Playgroud)

然后就像@vidarlo 建议的那样,我尝试了 mogrify 但没有调整大小选项,所以mogrify -quality 50 page1.jpgpage2.jpg 给了我 91kb 和 96kb 的两个文件!45 确实模糊了一些东西,> 50 将文件大小增加到 > 100kb。

以防万一,在尝试转换 file.pdf file.jpg 时出现以下错误 -

convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert-im6.q16: no images defined `file.jpg' @ error/convert.c/ConvertImageCommand/3258.
Run Code Online (Sandbox Code Playgroud)

为此,我修改了policy.xml位于/etc/ImageMagick-6. 我之前<policy domain="coder" rights="read | write" pattern="PDF" />添加了该行</policymap>,之前设置为 none(权限)。此解决方案绕过了此错误。

此外,我在修改此policy.xml文件时遇到了问题,它以只读模式打开(尽管我以管理员身份登录)。为此,我gedit admin:///etc/ImageMagick-6/policy.xml从终端使用使文件可写。

对于这两点,我要感谢这些,

再次,非常感谢大家!

  • 除非你的政府不合理(好吧,这句话不是开玩笑......),通常上传限制比他们对你的期望高得多。否则,他们会得到很多人向他们抱怨,他们不会想要的。虽然您了解计算机,但普通人并不了解。所以,如果你达到了这个限制,你可能做错了什么,也许?例如,也许 100 kb 是他们要求您降低扫描分辨率的方式。 (7认同)
  • @Ray 更有可能它不应该是扫描,或者他们只是重用了旧形式的基础设施。 (3认同)
  • ImageMagick 政策因某种原因而改变。在这种情况下,最好直接访问底层工具。(或者,或者,使用 [img2pdf](https://gitlab.mister-muffin.de/josch/img2pdf) 它不会撤消您运行之前的步骤并尝试优化大小的各种优化。例如,您可以尝试制作灰度JPEG,然后将其提供给`jpegoptim`,然后是`img2pdf`。) (2认同)

Nob*_*ody 6

最有可能的最好方法是以黑白(两种颜色,而不是灰度)扫描它。政府机构的表格不太可能需要全彩色或灰度。

一个体面的扫描仪会为黑白图像选择 jpeg 以外的压缩选项,这将导致文件小得多。

如果这还不够,那么使用 jbig2 手动压缩 bw 图像可能会导致文件更小,尽管节省的费用只会真正开始增加具有许多页面的较长文档。