在 .bat 文件中使用 ghostscript 压缩 PDF - 缺少文本

Posted

技术标签:

【中文标题】在 .bat 文件中使用 ghostscript 压缩 PDF - 缺少文本【英文标题】:Compressing PDF with ghostscript in .bat file - missing text 【发布时间】:2020-04-25 11:34:57 【问题描述】:

我正在尝试压缩 PDF 文件并使用 .bat 脚本将其转换为灰度,但我遇到了大问题。

当我进行压缩时,PDF 中的文本变为红色,当我添加灰度线时,脚本完成其工作后,文本变为白色/消失。

谁能帮我修复它,使文本仍然是黑色的?我的脚本部分:

gs -sDEVICE=pdfwrite -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -sOutputICCProfile=sgray.icc -dPDFSETTINGS=/ebook -dCompatibilityLevel=1.7 -dCompressFonts=true -dEmbedAllFonts=true -dNOPAUSE -dQUIET -dBATCH -dAutoRotatePages=/None -sOutputFile="%TEMP%\%%~nxf" "%%~f"

这是压缩前后的图片:

【问题讨论】:

【参考方案1】:

您还没有说您使用的是哪个版本的 Ghostscript。您没有提供 PDF 文件以便对其进行调查(图片可能显示问题,它们对诊断或修复没有帮助)。

您不应该设置 -dProcessColorModel,尤其是当您设置了 -sColorConversionStrategy 时。

您绝对不应该设置 -sOutputICCProfile。

将 PDFCompatibilityLevel 设置为高于 pdfwrite 设备已经设置的级别确实没有任何意义,除非您通过需要更高级别的 pdfmark 运算符添加内容(而您没有这样做)。

设置 CompressFonts=true 或 EmbedAllFonts=true 也没有意义,因为这些是默认值。

当您尝试诊断问题时,不要选择 -dQUIET,您希望 Ghostscript 告诉您它认为可能存在问题的任何事情。

在 Windows 上(我认为这是因为您在谈论 .bat 文件)Ghostscript 可执行文件称为 gswin32、gswin32c、gswin64 或 gswin64c,而不是 gs。所以我有点不明白你是如何让这个工作的。

您已设置 -dPDFSETTINGS=/ebook 设置 -sColorConversionStrategy,如果您查看 documentation 中的设置表,您将看到 /ebook 设置将颜色转换策略设置为RGB,因为它在命令行上比 your ColorConversionStrategy 晚,所以它是优先的。 ProcessColorModel(DeviceGray,来自您的命令行)和 ColorConversionStrategy(来自 PDFSETTINGS 值的 RGB)之间的混淆很可能是导致您的问题的原因。

当遇到此类问题时,我建议您简化命令行,直到您弄清楚究竟是什么原因造成的。我还建议您根本不要使用 PDFSETTINGS,因为这会同时更改 许多 配置控件。找出您要使用的那些并单独打开它们。

最后一点,Ghostscript 的 pdfwrite 设备不会“压缩”PDF 文件,它会根据输入生成 PDF 文件。如果您选择对图像进行缩减采样或更改色彩空间等操作,那么新的 PDF 文件可能会比输入的 PDF 文件小。虽然它没有被压缩,但它更小,因为您丢弃了信息。

【讨论】:

谢谢,信息量很大。我使用 cygwin 的 ghostscript 9.27,这就是 gs 工作的原因。我现在会尝试检查所有选项,但您已经帮了很多忙。

以上是关于在 .bat 文件中使用 ghostscript 压缩 PDF - 缺少文本的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ghostscript 在一个 postscript 批次中打印单独的 PDF 文件

java - 如何在文件路径中使用空格从java调用ghostscript

使用 ghostscript 创建 pdf 文件

在 ghostscript 中旋转 jpeg 图像

使用子进程在 Python 中运行 ghostscript 不起作用

如何更改 Ghostscript 输出文件(在打印机后台处理程序中)