【问题标题】:Can ImageMagick detect missing and non-embedded fonts in EPS files?ImageMagick 可以检测 EPS 文件中丢失和未嵌入的字体吗?
【发布时间】:2015-09-03 22:38:19
【问题描述】:

我们有一个基于 Java 和 ImageMagick 的上传服务,可以根据需要生成所需的资产,以包含在生成的文档中。

但是……

当用户上传引用非嵌入字体的 EPS(或类似字体)时,ImageMagick 不会抛出错误,而是简单地用自己设计的字体替换字体。

这意味着:

  1. 当他们的徽标看起来完全无法辨认时,用户会感到震惊
  2. 当打印软件抱怨它不知道要使用什么字体时,我们会收到渲染错误

所以...

有什么方法可以让 ImageMagick 报告未嵌入的字体和/或任何可以让我们查询上传的 EPS 文件以找到丢失字体的替代方法?

【问题讨论】:

    标签: fonts imagemagick image-uploading eps


    【解决方案1】:

    获取此信息最可靠的方法是直接运行 Ghostscript 并查看其输出。

    我说要“直接”运行它,因为 ImageMagick 在处理 EPS 输入时无论如何都会运行它。 (ImageMagick 无法使用 EPS、PS 或 PDF 输入——因此它利用 Ghostscript 作为其 delegate 来生成初始图像光栅数据,然后它会接管这些数据进一步处理)。

    例如,您可以这样做(命令语法适用于 Linux、Unix 或 Mac OS X):

    gs   -o /dev/null    -sDEVICE=pdfwrite unembedded-font-used.eps
    

    在 Windows 上你可以这样运行它:

    gswin64c.exe -o nul  -sDEVICE=pdfwrite unembedded-font-used.eps
    

    例如,Ghostscript 然后会在终端中报告此输出。这里是第一行:

    GPL Ghostscript GIT PRERELEASE 9.18 (2015-04-07)
    Copyright (C) 2015 Artifex Software, Inc.  All rights reserved.
    This software comes with NO WARRANTY: see the file PUBLIC for details.
    Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
    Can't find (or can't open) font file ArialMT.
    Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
    Can't find (or can't open) font file ArialMT.
    Querying operating system for font files...
    

    现在下一行,如果没有找到“足够好”的替代字体:

    Error: /typecheck in /findfont
    Operand stack:
       Arial
    Execution stack:
       %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   1919   1   3   %oparray_pop
    Dictionary stack:
       --dict:1190/1684(ro)(G)--   --dict:0/20(G)--   --dict:78/200(L)--
    Current allocation mode is local
    GPL Ghostscript GIT PRERELEASE 9.18: Unrecoverable error, exit code 1
    

    如果 Ghostscript 找到一种字体来代替缺失的字体,第二部分看起来有点不同:

    Loading NimbusSanL-Reg font from %rom%Resource/Font/NimbusSanL-Reg... 4674144 3087974 1934432 636034 1 done.
    

    可能有多个这样的行。您将能够准确地看到 Ghostscript 将使用哪个字体文件。在上述情况下,它将使用内置在其可执行文件中的字体,这由输出的%rom% 部分指示。如果在本地磁盘上找到字体,它将告诉完整路径。

    请注意一个额外的细节:上述输出的一部分将针对<stdin>,另一部分针对<stdout>。在上面的示例中,它们全部混合在一起,因为我从终端复制了它。如果您只想看到<stderr>,则必须根据需要自行采取适当的措施。


    当然,您也可以直接使用 Ghostscript 生成最终的 PNG、TIFF 或 JPEG 输出。也就是说,除非您之后需要 ImageMagick 进行更复杂的处理。

    【讨论】:

      猜你喜欢
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 2012-04-01
      相关资源
      最近更新 更多