Linux 上的 gs 9.22 不会呈现 Mac 上生成的 pdf 中的嵌入字体

gs 9.22 on Linux doesn't render embedded fonts in pdf generated on Mac

我正在尝试在 Linux 上渲染 this pdf,但生成的 png 显示缺少字体块。

gs -sDEVICE=png16m -o test.png AGREE\ II\ lijst.pdf

pdf 是在 Mac 上生成的(使用其 print to pdf 功能),并包含嵌入字体:

$> pdffonts AGREE\ II\ lijst.pdf
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
EFPVPD+ArialMT                       TrueType          MacRoman         yes yes no      12  0
RFRCNT+TimesNewRomanPSMT             TrueType          MacRoman         yes yes no      10  0
FLZUKV+Arial-BoldMT                  TrueType          MacRoman         yes yes no      11  0
VQHCHW+Arial-ItalicMT                TrueType          MacRoman         yes yes no      13  0

evinceqpdfview 显示 pdf 很好,但打印失败,可能是因为我的计算机使用相同的 ghostscript 将 pdf 渲染为位图。

非常感谢您的帮助。

$> gs -help
GPL Ghostscript 9.22 (2017-10-04)
Copyright (C) 2017 Artifex Software, Inc.  All rights reserved.
Usage: gs [switches] [file1.ps file2.ps ...]
Most frequently used switches: (you can use # in place of =)
 -dNOPAUSE           no pause after page   | -q       `quiet', fewer messages
 -g<width>x<height>  page size in pixels   | -r<res>  pixels/inch resolution
 -sDEVICE=<devname>  select device         | -dBATCH  exit after last file
 -sOutputFile=<file> select output file: - for stdout, |command for pipe,
                                         embed %d or %ld for page #
Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PostScriptLevel3 PDF
Default output device: x11alpha
Available devices:
   alc1900 alc2000 alc4000 alc4100 alc8500 alc8600 alc9100 ap3250 atx23
   atx24 atx38 bbox bit bitcmyk bitrgb bitrgbtags bj10e bj10v bj10vh bj200
   bjc600 bjc800 bjc880j bjccmyk bjccolor bjcgray bjcmono bmp16 bmp16m
   ...
   plibk plibm png16 png16m png256 png48 pngalpha pnggray pngmono pngmonod
   pnm pnmraw ppm ppmraw pr1000 pr1000_4 pr150 pr201 ps2write psdcmyk
   psdcmykog psdrgb pwgraster pxlcolor pxlmono r4081 rinkj rpdl samsunggdi
   ...
   xpswrite
Search path:
   /usr/share/ghostscript/9.22/Resource/Init :
   /usr/share/ghostscript/9.22/lib :
   /usr/share/ghostscript/9.22/Resource/Font :
   /usr/share/ghostscript/fonts : /usr/share/fonts/Type1 : /usr/share/fonts
Ghostscript is also using fontconfig to search for font files
For more information, see /usr/share/ghostscript/9.22/doc/Use.htm.
Please report bugs to bugs.ghostscript.com.

我什至在我的电脑上安装了字体:

$> fc-list : family | egrep -i arial\|times
Times New Roman
Times
Arial

Ghostscript 9.22 从 Fedora 23 上标记的发布源(目前在 table here 的底部可用)构建,按我的预期呈现文件。

所以它似乎不是 'gs9.22 on Linux' 它的 'Ghostscript 9.22 构建在我的 Linux 风格上,由包维护者在 Linux 发行版上编译我是使用'这很可能是错误的。

这可能有 许多 原因。首先,各种发行版将自己的补丁应用于 Ghostscript 源代码树。其次,打包者坚持使用系统共享库,而不是 Ghostscript 源附带的第三方库源。我们,Ghostscript 开发团队,知道 这些工作,因为这是我们测试的。我们无法测试每一种 Linux 随附的所有系统库的所有可能版本(和补丁),您可能遇到了某种不兼容问题(最有可能是 FreeType,因为它的字体)。

请注意,您看到的不是 'missing font blocks',而是缺少 字形 。那是 /.notdef 字形,当字体中不存在该字形时,它用于代替字形呈现。渲染文件时你没有给出 Ghostscript 的反向通道输出,如果字体丢失那么会有一些警告。

我建议您从上面的 link 获取 Ghostscript 源代码,或者使用 Git 获取最新的源代码。自己构建(您需要安装 gcc、make 和 autotools)并进行测试。如果这不起作用,请提交错误报告 here 请务必描述您是如何构建 Ghostscript 的,指定您使用的命令行,并将有问题的文件附加到错误报告中。

在同一位置有一个 pre-built Linux 二进制文件,您可以尝试一下,但很有可能它根本无法在您的 Linux 上运行。

顺便说一句,在您的系统上使用可用的字体根本无济于事,因为 PDF 文件中的字体已被子集 re-encoded。基本上没有办法使用系统字体来替换嵌入在 PDF 文件中的字体,解释器必须使用嵌入的字体。