【问题标题】:ghostscript shrinking pdf doesn't work anymore缩小pdf的ghostscript不再起作用
【发布时间】:2018-07-10 14:11:26
【问题描述】:

这里的第一个问题。

所以我使用 ghostscript 命令来缩小我的 pdf,这产生了很好的效果(大小减少了大约 30-40%)。然而,上周的一天,它停止缩小它们,而是返回给我一个大小甚至更重的 pdf(大约 1% 或更少)。因此,我不知道发生了什么,因为该命令以前可以正常工作,并且我能够轻松缩小一些 pdf...

我会注意到,在我的 pdf 文件上使用 gs 时,它总是会返回有关 GlyphLessFont 中缺少某些字形的错误,但我认为这与我的问题无关(尽管如果您可以将我重定向到修复 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:在等待答案时,我继续扫描和扫描文档,似乎在通过 pdfocr 传递我的 pdf 后,它像以前使用 ghostscript 一样缩小了。因此,我想知道脚本 pdfocr 是否使用 ghostscript 进行缩小,因为我知道它会在 OCR 化过程中为其他任务调用它。

【问题讨论】:

    标签: pdf resize ocr tesseract ghostscript


    【解决方案1】:

    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 设置为较低的值。

    【讨论】:

    • 您好,感谢您的回复。好吧,我的 pdf 看起来几乎一样,就像一个协会的年度报告,他们的扉页总是这样。所以第一页可能就是这种情况。但是,如果更多地减少作为其余文档的文本页面,我会感兴趣,我现在将包括我的工作 pdf。我还注意到(我正在继续扫描/扫描 pdf),现在我的 pdf 在被 ocered 后减少了,ocr 层仍然完好无损,这让我有点困惑....
    • 好的,非常感谢您的有用评论!你救了我:)
    猜你喜欢
    • 2012-08-04
    • 2014-04-04
    • 2021-10-30
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    相关资源
    最近更新 更多