我有一个 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。
答案1
低于 90 值时 pdf 中的文本看不清,我确定我的申请会被拒绝。
这是扫描文件。这意味着它不是文本,而是图像页面。PDF 支持多种图像压缩方案,包括无损压缩,但质量和质量下降表明您正在使用 JPEG。
这可能是最有效的存储方法。
您想将两页存储在小于 100kB 的内存中。即每页 50kB。这是一项艰巨的任务 - 但可能是可能的。
我会将页面导出为 JPG,然后调整质量设置和分辨率,直到获得结果:
convert file.pdf file.jpg
这将分别为您提供第 1 页和第 2 页的 file-0.jpg 和 file-1.jpg。
现在我们可以尝试降低页面的分辨率:
mogrify -resize 600x700 -quality 45 file-0.jpg
通过这种方式,我设法将 A4 页面缩小到 28kB。虽然清晰易读,但不太清楚:
要在处理文件以减小尺寸后将其转换回 PDF,请运行
convert file-?.jpg file.pdf
除了使用mogrify来修改文件之外,还可以使用gimp等工具。
答案2
由于文件大小优化的扫描文档可能是黑白的,.pbm
因此单色位图格式似乎非常适合这种情况,您可以将其转换回 png 以嵌入到 pdf 中。
使用示例文档1 (imgur 永久链接:https://i.stack.imgur.com/2WjRh.jpg)
这是一份 1751x2451 jpg 文档扫描件,大小为 1.71MB,黑白,带一些蓝色点缀
convert document_scanner_sample_scan_00_zoom.jpg -resize 1000 intermediate.pbm
convert intermediate.pbm page1.png # 1000x1436, 46kb
page1.png 看起来相当不错46kb(https://i.stack.imgur.com/DYh6R.png)
正如评论中指出的那样,png 需要转码才能嵌入到 pdf 中。默认convert
使用pdf 压缩格式 ( ),生成的 pdf 为 67kb。改用适用于单色图像的格式,将其降至 57kb/FlateDecode
convert page1.png page1.pdf
/CCITTFaxDecode
convert page1.png -alpha off -monochrome -compress fax page1.pdf
请参阅 image magick 文档以了解命令行选项到 pdf 压缩格式的映射: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
答案3
谢谢大家的帮助!谢谢@vidarlo!你们的建议和想法真的帮助我度过了难关,而且还有一点运气。我会将你们的意见标记为解决方案,因为它对这项任务确实有帮助。
对我来说,幸运的是政府网站允许我们分别上传两个 100kb 的文件。但网站上没有提到这一点!上传一页后,网站只会显示第二个对话框。哇!
所以现在的想法是将每个页面压缩到 100kb 以下。我决定分别扫描每个页面:
第 1 页 144kb.pdf,第 2 页 165kb.pdf
我发现(至少对于我的文档而言)convert file.pdf file.jpg
效果不如pdftoppm file.pdf jpeg -r 75 -jpeg
。我不知道为什么,但 convert 的输出为第一页(144kb.pdf)提供了 258kb.jpg,而 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
然后像@vidarlo 建议的那样,我尝试了 mogrify,但没有调整大小选项,因此mogrify -quality 50 page1.jpg
page2.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.
为此,我修改了policy.xml
位于的文件。我在之前添加了/etc/ImageMagick-6
行,该行之前设置为无(权限)。此解决方案绕过了此错误。<policy domain="coder" rights="read | write" pattern="PDF" />
</policymap>
另外,我在修改此文件时遇到了问题policy.xml
,它以只读模式打开(尽管我以管理员身份登录)。为此,我使用gedit admin:///etc/ImageMagick-6/policy.xml
终端使文件可写。
对于这两件事,我要感谢这些,
- https://stackoverflow.com/questions/52998331/imagemagick-security-policy-pdf-blocking-conversion
- 如何获取编辑系统配置文件的权限?
再次感谢大家!
答案4
经过多次试验后,我发现最简单的方法是将 PDF 加载到 LibreOffice Writer 中(这可能需要一些时间,并且对于较大的 PDF 会消耗内存 - 因此请关闭不必要的应用程序)。加载后,选择“导出为 PDF...”,将 jpeg 压缩设置为 50%,将图像分辨率设置为 150dpi - 您可以根据需要调整压缩和 dpi 设置。Mike