将外部字体嵌入 pdf 文件

将外部字体嵌入 pdf 文件

acroreader 在一个 pdf 文件中显示缺少字体(WPMathB、WPMathA WP Greek Helve,......),可以从以下位置轻松下载http://www.fontpalace.com

然而,ghostscript 命令失败,尽管它指向缺少的字体目录,/home/user/WP_ttf_fonts

 $ gs -o file-with-embedded-fonts.pdf -sDEVICE=pdfwrite -dEmbedAllFonts=true  -sFONTPATH="/home/user/WP_ttf_fonts" input-without-embedded-fonts.pdf
Page 35    
Can't find CID font "WPMathB".    
Attempting to substitute CID font /Adobe-Identity for /WPMathB, see doc/Use.htm#CIDFontSubstitution.    
Loading a TT font from 
/usr/share/ghostscript/9.10/Resource/CIDFSubst/DroidSansFallback.ttf to emulate a CID font Adobe-Identity   **** Warning: can't process font stream, loading font by the name.    
 ... Done.    
Can't find CMap Identity-UTF16-H building a CIDDecoding resource.     
Can't find CID font "WPMathB".    
Attempting to substitute CID font /Adobe-Identity for /WPMathB, see doc/Use.htm#CIDFontSubstitution.    
Loading a TT font from /usr/share/ghostscript/9.10/Resource/CIDFSubst/DroidSansFallback.ttf to emulate a CID font Adobe-Identity
**** Error reading a content stream.     
The page may be incomplete.    
   **** File did not complete the page properly and may be damaged.    
 ... Done.

有什么帮助吗?请问如何告诉 ghostscript 接受这些字体?

答案1

WPMathA 等来自 Correl Word Perfect,Correl 允许您下载这些字体(尽管我在自解压 zip 存档中没有找到任何许可证)。不要害怕 *.exe,因为如果您解压它,它就可以正常工作。WP MathA 字体的文件名是 Wphv06na.ttf,而且它并没有那么可怕。

例子:

sudo chown $USER /usr/local/share/fonts/
cd /usr/local/share/fonts/
wget http://www.corel.com/akdlm/6763/downloads/WordPerfect/wpwin/9/wpfonts.exe
unzip wpfonts.exe
sudo chown -R root /usr/local/share/fonts/
sudo fc-cache

下一个障碍是 PDF 有WPMathA,但字体缓存有WP MathA

fc-list | grep local.*MathA
/usr/local/share/fonts/Wphv06na.ttf: WP MathA:style=Normal
fc-list -v | grep -c WPMathA
0

您的任务是创建缺少的配置文件,并使用所需的别名将其绑定WPMathAWP MathA。之后,您就可以放松一下,用牙签建造一艘航空母舰了。

mkdir -p ~/.config/fontconfig/
echo '<?xml version="1.0"?>' > ~/.config/fontconfig/fonts.conf
xmlcopyeditor ~/.config/fontconfig/fonts.conf

插入:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration -->
<fontconfig>
  <alias>
    <family>WPMathA</family>
    <prefer><family>WP MathA</family></prefer>
  </alias>
</fontconfig>

不要忘记重新构建缓存。我不需要 root/sudo。

fc-cache

此时,acroread 已不再抱怨缺少 WPMathA,而 ghostscript bugzilla bug 687595 有一条评论称在 8.60 中添加了 fontconfig 支持,但我猜他们撒了谎。如果您仍然坚持使用嵌入字体创建 PDF,即使您现在拥有的字体应该可以正常工作,您可以阅读 ghostscript bugzilla bug 692001,我将在此处引用:

评论 2 Ken Sharp 2011-02-28 11:44:42 PST

有两种方法可以做到这一点:

1) 找到名为 Arial 的正版 CIDFont,将其放在 gs/Resource/CIDFont 中,然后告诉 Ghostscript 使用磁盘文件以及内置文件系统。这可以通过 -I 命令行开关(例如 -I/gs/Resource)完成。

2) 使用 TrueType 字体作为替代。为此,您需要编辑 gs/Resource/Init/cidfmap 并添加字体 (Arial) 的条目,指定要使用的 TrueType 字体和其他一些参数。然后,您还必须告诉 Ghostscritp [sic] 使用指定的文件,再次使用上面的 -I 开关。

您还可以通过在 cidfmap 文件中指定名称来使用具有不同名称的现有 CIDfont 作为替代。

请参阅文档:/gs/doc/Use.htm

寻找“CID 字体”和“CID 字体替换”。

您将必须要apt-get install ghostscript-doc得到file:///usr/share/doc/ghostscript-doc/Use.htmKen 所指的。

要更新的文件/var/lib/ghostscript/fonts/cidfmap只需添加此行/WPMathA << /FileType /TrueType /Path (/usr/local/share/fonts/Wphv07na.ttf) /SubfontID 0 /CSI [(Identity) 0] >> ;

然后运行gs -o embedeed-font.pdf -sDEVICE=pdfwrite -dEmbedAllFonts=true -I/usr/local/share/fonts/Wphv06na.ttf no-embedded-font.pdf

请阅读file:///usr/share/doc/fontconfig/fontconfig-user.html背景信息。它将告诉您请参阅 XDG 基本目录规范以了解更多详细信息,因为您将在那里找到 $XDG... 系列环境变量的默认值,就显示而言,这些变量在 14.04 上均未设置为任何值ps axwwe

相关内容