ghostscript缩小pdf不再起作用

时间:2018-07-10 14:11:27

标签: pdf resize ocr tesseract ghostscript

第一个问题在这里。

因此,我正在使用ghostscript命令缩小我的pdf,从而获得了不错的效果(大小减小了30-40%)。但是,上周的一天,它停止缩小它们,而是给我返回了一个pdf甚至更大的pdf文件(大约1%或更少)。因此我不知道发生了什么,因为该命令曾经可以正常工作,而且我能够轻松地缩小一些pdf ...

我会注意到,在我的pdf上使用gs时,它总是会返回有关GlyphLessFont中缺少的某些字形的错误,但我认为这与我的问题无关(尽管如果您可以将我重定向到修复将要删除的字形字体)非常感谢)。

这是我使用的命令:

`gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf`

这也是正确缩小的pdf示例(原始文件大小为4.7mo /缩小版本为2.9mo)https://nofile.io/f/39Skta4n25R/bulletin1_ocr.pdf

编辑:适用于以上文件的精简版本:https://nofile.io/f/QOKfG34d5Cg/bulletin1_light.pdf

这是另一个无效的pdf的输入和输出文件 (输入)https://nofile.io/f/sXsU0Mcv35A/bulletin15_ocr.pdf (通过上面的gs命令输出)https://nofile.io/f/STdJYqqt6Fq/out.pdf

您会注意到输入和输出文件均为27.6mo,而第一个文件减少了。

我还要补充一点,我已经使用pdfocr和tesseract引擎在这些pdf上执行了OCR,这就是为什么我没有尝试转换为png来减小尺寸的原因,我需要额外的OCR层以便我们可以发布这些文件提交给我们的网站,如果可能,我们希望它们更轻巧。

最终信息:ghostscript -v为9.10(2013-08-30),tesseract为3.03,leptonica为1.70,pdfocr为0.1.4

希望你们能提供帮助!

EDIT2:在等待答案的同时,我继续扫描和查找文档,似乎在将pdf通过pdfocr传递之后,它像以前的ghostscript一样被缩小了。因此,我想知道脚本pdfocr是否对ghostscript进行了缩小,因为我知道它会在OCR化过程中将其调用用于其他任务。

1 个答案:

答案 0 :(得分:2)

PDF的介质尺寸为35.44 x 50.11英寸,真的是原始尺寸吗?

鉴于您似乎经常使用OCR,我认为一般来说,您的PDF文件仅包含非常大的图像。在这种情况下,对文件大小的主要影响将来自对图像进行下采样。如果您查看documentation,则可以看到/ screen设置将图像降采样为72 dpi,阈值为1.5(因此,超过72 * 1.5 = 107 dpi的图像将降采样为72,其他任何值都被认为是不值得)

您的PDF文件的介质大小为35.44 x 50.11英寸。它的文件相当大(26页),因此我将只考虑第1页。在此页面上,Tesseract在其中放置了一张图像和一堆不可见的文本。第1页上的图像是8位RGB图像,尺寸为2481x3508,它覆盖了整个页面。

因此,该图像的分辨率为2481 / 35.44 x 3500 / 50.11 = 70.00 x 69.84

由于该分辨率低于72 dpi,因此pdfwrite不会对其进行降采样。

如果您的媒体尺寸为8.5 x 11英寸,则图像的有效分辨率为2481 / 8.5 x 2500/11 = 291.8 x 318.18,因此将被下采样大约4倍。

但是.....对我来说,您的“有效” PDF文件还具有很大的媒体尺寸,并且图像也已经低于下采样分辨率。当我使用命令行运行该文件时,输出文件的大小与输入文件的大小基本相同。

所以我茫然地看到您如何体验减小的文件大小。也许您也可以发布缩小的文件。

编辑

因此,通过Ghostscript后文件较小的原因是,绝大多数内容是扫描的页面。这些以DCT编码图像(JPEG)的形式存储在PDF文件中。

图像的分辨率足够低(请参见上文),因此无法进行降采样。但是,旧版本的Ghostscript的工作方式是图像数据始终在读取时解压缩,然后在写入时重新压缩。

由于JPEG是有损图像格式,这意味着解压缩和重新压缩的图像的质量比原始图像低,并且应用质量损失的方式意味着数据的压缩效果更好。

因此,对Ghostscript运作方式的怪癖会导致质量下降,但文件变小。请注意,对于当前版本的Ghostscript,JPEG数据将原封不动地传递,除非,您的配置要求对其进行采样或颜色转换。

那么为什么不压缩其他文件呢?好吧,对于当前的代码,当然,这就是我正在使用的代码,不会,因为图像不需要下采样或其他任何操作。

现在,当我通过这里的旧版本Ghostscript(9.10,之所以选择它是因为您正在使用的缩小文件正在使用)运行它时,确实可以看到文件大小减小了。它从26MB减少到15MB。

当我查看您的“无法正常工作”的压缩文件时,发现 是Ghostscript 9.23而非Ghostscript 9.10生成的。

所以您看到行为上的差异的原因是因为您已升级到更新版本的Ghostscript,在保留图像数据不变方面做得更好。

如果您真的想降低图像质量,可以设置-dPassThroughJPEGImages=false,但是IMO最好要么获得原始PDF coreect的介质尺寸(确定页面不是真的35x50英寸? )或将ColorImageResolution设置为较低的值。