Fonts ImageMagick能否检测EPS文件中缺失的和未嵌入的字体?

Fonts ImageMagick能否检测EPS文件中缺失的和未嵌入的字体?,fonts,imagemagick,image-uploading,eps,Fonts,Imagemagick,Image Uploading,Eps,我们有一个基于Java和ImageMagick的上传服务,可以根据需要生成所需的资产,以包含在生成的文档中 但是 当用户上传引用非嵌入字体的EPS(或类似字体)而不是抛出错误时,ImageMagick只是用自己设计的字体替换这些字体 这意味着: 当用户的徽标看起来完全无法识别时,用户会大吃一惊 当打印软件抱怨它不知道使用什么字体时,我们会得到一个渲染错误 所以 是否有任何方法可以让ImageMagick报告未嵌入的字体和/或允许我们查询已上载的EPS文件以查找丢失的字体的任何替代方法?获取此信息

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

但是

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

这意味着:

  • 当用户的徽标看起来完全无法识别时,用户会大吃一惊
  • 当打印软件抱怨它不知道使用什么字体时,我们会得到一个渲染错误
  • 所以


    是否有任何方法可以让ImageMagick报告未嵌入的字体和/或允许我们查询已上载的EPS文件以查找丢失的字体的任何替代方法?

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

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

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

    在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%
    部分指示。如果在本地磁盘上找到字体,它将显示完整路径

    只需注意一个附加细节:上述输出的一部分将针对
    ,另一部分针对
    。在上面的例子中,它是混合在一起的,因为我从终端复制了它。如果您只想查看
    ,则必须根据需要自行采取适当的措施


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

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