Imagick PDF to JPG 未知字体

Posted

技术标签:

【中文标题】Imagick PDF to JPG 未知字体【英文标题】:Imagick PDF to JPG Unknown fonts 【发布时间】:2013-09-25 19:34:39 【问题描述】:

所以最近我设法创建了一组 php 脚本,允许哑机用户上传 PDF 文件并将其作为 JPG 图像查看。它完美地工作。我对其进行了测试,在大多数情况下它似乎都可以正常工作。此外,负载完美平衡,因此到目前为止没有任何问题,我已准备好应对大量流量!

当用户上传的 PDF 文件没有嵌入字体并且使用 Ghostscript 无法识别的字体时,就会出现我的问题。是否可以设置默认后备字体以防止 Ghostscript 出现错误?

设置: 操作系统:Debian

它是如何工作的:我使用 imagick 提供的“转换”命令将 pdf 转换为 jpeg。没有设置其他参数。 我不确定我的 Ghostscript/Imagick 设置如何,但我认为它没有什么特别之处。如果您需要了解有关安装的信息,请提供具体配置文件的位置和设置:我会尽快提供。

如果您还有其他需要,请随时提出! 提前致谢!

【问题讨论】:

【参考方案1】:

Ghostscript 不会对丢失的字体抛出错误,它会尝试回退,最初通过将名称与字体和样式列表进行匹配,最后通过(通常)替换为 Helvetica。

在缺少 CIDFonts 的情况下,您不会说您看到缺少哪种类型)它会尝试替换并最终回退到使用 DroidSansFallback,它可能没有字形但仍然不会引发错误。

因此,要么您使用的 Ghostscript 版本太旧而无法提供此功能(并且您没有说明您使用的是什么版本的 GS),或者该功能已被破坏。当前版本是 9.10,我建议您确保使用它,理想情况下是您自己构建它,因为 Linux 维护人员习惯于将特定于发行版的补丁和不寻常(我们认为不受欢迎)构建条件应用于 Ghostscript .

虽然您可以使用 -sFONTPATH 添加其他字体,但对于缺少字体的 PDF 文件,这通常无济于事,因为您的系统上通常也不会有丢失的字体。

user1283633 非常正确,不需要使用convert,除非需要额外处理,否则Ghostscript 完全可以直接生成JPEG 输出。

【讨论】:

你是对的!这是 Ghostscript 抛出的错误:Substituting CID font resource/Adobe-GB1 for /STZhongsong. Error: /undefinedresource in findresource 我的版本是8.62,尝试升级但由于没有c编译器而失败。我会请系统管理员看一下。 当前版本是 9.10,你真的应该使用它。 8.62 已经 5 年了。如果升级到 9.06,您将丢失最新的功能集和错误修复。 我知道你在说什么并且理解它。不过@user1283633 表示他已经测试了所有版本,发现 9.06 是目前最稳定的版本。除此之外,Debain 的最新软件包版本也是 9.06:如果它解决了我的问题,它将很容易安装和尝试。如果它仍然不起作用:将尝试更新 9.10,如果这也不起作用,我将自己上吊。 :)【参考方案2】:

是的,你可以在windows中添加这个指向字体文件夹的参数,例如,在ghostscript过程中,它将开始从此路径获取字体

  -sFONTPATH=c:/windows/fonts 

还请注意,您可以下载并添加其他字体,这些字体在 windows 字体文件夹中不可用。

至于设置问题,对我来说,我使用 ghostscript 将 PDF 转换为图像,为什么要使用 imagemagick?至于这部分不需要参数,在我的情况下,我正在使用参数来提高生成图像的质量,作为建议,您可以将此参数添加到 ghostscript 以控制生成图像的质量

  -r150 

根据 ghosscript 文档here

您可以为 Ghostscript 提供命令行选项:-dPDFNOCIDFALLBACK。通过将 -dPDFNOCIDFALLBACK 与 -dPDFSTOPONERROR 结合使用,生产工作流程可以强制缺少 CIDFont 的 PDF 出错,并避免仅在打印后才意识到 CIDFont 丢失。

【讨论】:

我在 Linux 上,不可能安装用户可能使用的所有字体,所以用不同的字体替换字体似乎没问题。你是对的,我可以使用 Ghostscript 代替 Imagick,但这不能解决字体问题。 我已经编辑了我的答案,您可以在文档中阅读更多内容,但是在 linux 中您可以添加一个带有字体的文件夹并在脚本中引用它,希望这会有所帮助 猜猜真正的问题是用户上传的 PDF 不是正确的 PDF? “因此,如果您想处理任何带有非嵌入 CID 字体的 PDF 文档(这不是正确的 PDF),您需要手动创建一个合适的 lib/cidfmap,可能为每个文档创建一个特定的 lib/cidfmap。” - 不,字体是嵌入的:ghostscript 似乎处理错误。 刚刚从您下面的评论中注意到您使用的是旧版本的 ghostscript,但是我什至在 9.06 之后的新版本中遇到了问题,特别是 9.07,一些 PDF 无法正常工作,并且在发布了错误的票后.ghoscript.com 一些用户推荐了 9.06,这对我来说是迄今为止最稳定的版本,它适用于所有 PDF 我让系统管理员看看 :) 希望它能解决我的问题手指交叉

以上是关于Imagick PDF to JPG 未知字体的主要内容,如果未能解决你的问题,请参考以下文章

用php为imagick设置密度参数

imagick 崩溃与 PHP 5.3

PHP pdf 转 图片

在 xampp Windows 上安装 imagick 库扩展?

php Imagemagick jpg 黑色背景

imagick - 设置输出pdf的纸张大小