imagemagick 缩小 pdf 的大小

Don*_*lio 14 pdf imagemagick imagemagick-convert

我需要自动减小某些用户上传的 pdf 的大小,以便可以通过电子邮件发送它们。

我有一个小 imagemagick oneliner 可以减少我的尺寸:

convert -density 120 -quality 10 -compress jpeg original.pdf output.pdf
Run Code Online (Sandbox Code Playgroud)

基本上以 jpg 格式导出 pdf 的每一页,更新密度和质量,并将页面重新打包到新的 PDF 中。

这工作得很好,除了使用这个命令有时文件最终会变大,我需要重新运行调整密度和质量以获得最小的大小,使 pdf 文档中的文本仍然可读。

我不确定如何自动化它。我想使用识别来获取文件的特征(高度宽度密度......)并执行诸如一半的数字或类似的操作。但我正在努力获取有关文件的信息。

有什么建议么?

谢谢,

por*_*org 1

附录:参数-compression jpeg必须明确提交,否则您的 PDF 中将得到未压缩的图像资源:

$ cd ~/Pictures/Scans/

$ pdfimages -list Test.pdf 
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    4961  7016  icc     3   8  jpeg   yes        5  0   600   600 5907K 5.8%

$ convert -density 150 -quality 60  Test.pdf Test-150-060.pdf 

$ pdfimages -list Test-150-060.pdf 
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    1240  1754  rgb     3   8  image  no         8  0   150   150 6397K 100%
   1     1 smask    1240  1754  gray    1   8  image  no         8  0   150   150 33.5K 1.6%

$ convert -density 150 -quality 60 -compress jpeg  Test.pdf Test-150-060-jpeg.pdf 

$ pdfimages -list Test-150-060-jpeg.pdf 
page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    1240  1754  rgb     3   8  jpeg   no         8  0   150   150 42.5K 0.7%
   1     1 smask    1240  1754  gray    1   8  image  no         8  0   150   150 33.5K 1.6%
Run Code Online (Sandbox Code Playgroud)