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