【问题标题】:Imagick/Ghostscript alternative for converting pdf to jpg将 pdf 转换为 jpg 的 Imagick/Ghostscript 替代方案
【发布时间】:2018-05-28 16:35:50
【问题描述】:

我正在尝试使用 imagick/ghostscript(v9.10,显然是为 ubuntu 14.04 构建的最新版本)和 php 将 pdf 文件转换为 jpg 格式。不幸的是,imagick 不断删除特殊字符,如 éö。我认为缺少字体是造成这种行为的原因。我收到了来自几十家不同公司的 PDF 文件,他们经常更改使用的字体。因此我无法导入任何使用过的字体。 我想将pdf转换为jpg(或png)并稍微调整它的大小,仅此而已。是否有另一种不需要ghostscript的可能解决方案? 编辑:源代码

foreach(glob("$files_temp*.pdf") as $globpdf){
            $imagick = new Imagick(); 
            $imagick->readImage($globpdf);
            $imgname=basename($globpdf,".pdf");
            $imagick->setImageCompressionQuality(25);
            $imagick->setImageFormat('jpg');

            $imagick->writeImage($files_img.$imgname.'.jpg');
            $imgsql=$imgname.'.jpg';
            }

【问题讨论】:

  • 您应该首先显示您正在使用的确切命令行。这样,最终有人可以给你提示或解决问题。你最后一个问题太笼统了。有几十个这样的解决方案。例如,您可以在 PDF 阅读器中显示 PDF 文件,截取屏幕截图并将其转换为 JPG ...
  • 不是实际的答案,但可能有用:可以将 TTF 字体(从 Windows 机器)复制到您的 Linux 机器,并让 Ghostscript 知道它们。很多年前我做过一次,所以我知道它有效,但我真的不记得确切的步骤。顺便说一句,如果您收到的 PDF 没有嵌入所有字体,那么您无论如何都会遇到问题(撇开特殊字符的问题不谈),因为(转换后的)文件看起来不像原始文件。
  • @Binarus,感谢您的回复。我添加了代码。我不知道为什么,但创建的 jpg 看起来与 pdf 文件一模一样——除了缺少的特殊字符。只有空白区域,而不是带边框的正方形或类似的东西。
  • 由于我不了解 PHP 和 Ubuntu,我只能给出最后的建议:我认为 PHP 在后台使用 ImageMagick,所以为了进一步调试问题,您可以直接使用 ImageMagick(您你必须自己弄清楚所需的命令行开关:-))。如果可行,您就知道问题出在 PHP 或 PHP ImageMagick 库中,而不是 ImageMagick 本身,您最终可以编写一个简单的 shell 脚本来执行您想要的操作(不使用 PHP)。
  • 最后一个提示:我曾经有一个复杂的海量图像转换任务,并尝试使用 ImageMagick 解决它。我进行了彻底的测试,发现 ImageMagick 在许多情况下都表现不佳。然后我切换到 GraphicsMagick 而不是 ImageMagick 并且从那以后没有任何问题。因此,如果您愿意尝试 bash 脚本而不是 PHP,您可以尝试 GraphicsMagick(最终,PHP 实现了 GraphicsMagick,以便您可以继续使用 PHP)。

标签: php ghostscript imagick


【解决方案1】:

如果不查看导致您出现问题的示例文件,就不可能对此进行彻底的评论。请注意,您实际上根本不需要 IM 进行此转换,Ghostscript 完全能够自行渲染为 JPEG。

Binarus 完全正确,如果您的 PDF 文件不包含他们需要的所有字体,那么无论您使用什么工具,您都会在渲染它们时遇到问题。这些可能在不同的应用程序中或多或少被夸大了,但是每当您替换字体时,结果都是不正确的。所以你应该努力教育你的用户,让他们创建嵌入字体的 PDF 文件,那么你就不会有那么多问题了。

说了这么多,您使用的是相当老的 Ghostscript 版本。 9.10 已经 4 岁了,完全有可能在那段时间对丢失的字体替换进行了改进(事实上,我知道有)。我理解坚持使用 LTS 版本的愿望,但说真的,您需要考虑升级。

当然,还有其他 PDF 渲染工具,我可能会推荐 Poppler 或 MuPDF 或 Evince。但所有这些都可能是旧版本以及旧 Linux 上的旧版本,并且在任何情况下都可能会遇到与任何其他 PDF 使用者相同的问题,如果字体不可用,那么就会出现输出问题。

如果您提供一个示例,那么我将研究实际问题是什么,并将 9.10 的结果与当前代码进行比较,但没有它,就没有什么可继续了。

【讨论】: