如何添加CIDFont,如字体名称包含中文字符?



我的 Pdf 文件中有许多不同的字体,如方正细等线简体、方正黑体_GBK等。因此,当我使用命令gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -dPDFSTOPONERROR -dNOOUTERSAVE -dPDFSETTINGS=/prepress -dCompressFonts=true -dSubsetFonts=false -dEmbedAllFonts=true -sColorConversionStrategy=RGB -dCompatibilityLevel=1.6 -sOutputFile=output.pdf 1000027661706311repair1.pdfpdf转换为其他格式时,它会运行并报告错误:

Processing pages 1 through 3.
Page 1
Can't find CID font "方正黑体_GBK".
Attempting to substitute CID font /Adobe-GB1 for /方正黑体_GBK, see doc/Use.htm#CIDFontSubstitution.
The substitute CID font "Adobe-GB1" is not provided either. attempting to use fallback CIDFont.See doc/Use.htm#CIDFontSubstitution.
Loading a TT font from /usr/local/share/ghostscript/9.50/Resource/CIDFSubst/DroidSansFallback.ttf to emulate a CID font Adobe-GB1 ... Done.
Can't find CID font "方正细等线简体".
Attempting to substitute CID font /Adobe-GB1 for /方正细等线简体, see doc/Use.htm#CIDFontSubstitution.
Can't find CID font "楷体_GB2312".
Attempting to substitute CID font /Adobe-GB1 for /楷体_GB2312, see doc/Use.htm#CIDFontSubstitution.
Loading NimbusRoman-Regular font from /usr/local/share/ghostscript/9.50/Resource/Font/NimbusRoman-Regular... 9497580 8102504 3768888 2094014 3 done.
Page 2
Can't find CID font "方正黑体_GBK".
Attempting to substitute CID font /Adobe-GB1 for /方正黑体_GBK, see doc/Use.htm#CIDFontSubstitution.
Loading a TT font from /usr/local/share/ghostscript/9.50/Resource/CIDFSubst/DroidSansFallback.ttf to emulate a CID font Adobe-GB1 ... Done.
Can't find CID font "方正细等线简体".
Attempting to substitute CID font /Adobe-GB1 for /方正细等线简体, see doc/Use.htm#CIDFontSubstitution.
Page 3
Can't find CID font "方正细等线简体".
Attempting to substitute CID font /Adobe-GB1 for /方正细等线简体, see doc/Use.htm#CIDFontSubstitution.
Loading a TT font from /usr/local/share/ghostscript/9.50/Resource/CIDFSubst/DroidSansFallback.ttf to emulate a CID font Adobe-GB1 ... Done.
Can't find CID font "方正黑体_GBK".
Attempting to substitute CID font /Adobe-GB1 for /方正黑体_GBK, see doc/Use.htm#CIDFontSubstitution.
Can't find CID font "楷体_GB2312".
Attempting to substitute CID font /Adobe-GB1 for /楷体_GB2312, see doc/Use.htm#CIDFontSubstitution.

这是我的/usr/local/share/ghostscript/9.50/Resource/CIDFSubet 文件夹:

-rw-r--r-- 1 root root 23M 12月 12 09:17 DroidSansFallback.ttf
lrwxrwxrwx 1 root root  35 12月 11 10:19 FZBSK.TTF -> /usr/share/fonts/winfonts/FZBSK.TTF
lrwxrwxrwx 1 root root  36 12月 11 10:19 FZDBSK.TTF -> /usr/share/fonts/winfonts/FZDBSK.TTF
lrwxrwxrwx 1 root root  35 12月 11 10:19 FZHTK.TTF -> /usr/share/fonts/winfonts/FZHTK.TTF
lrwxrwxrwx 1 root root  35 12月 11 10:19 FZSSK.TTF -> /usr/share/fonts/winfonts/FZSSK.TTF
lrwxrwxrwx 1 root root  36 12月 11 10:19 FZXBSK.TTF -> /usr/share/fonts/winfonts/FZXBSK.TTF
lrwxrwxrwx 1 root root  37 12月 11 10:17 FZXDXJW.TTF -> /usr/share/fonts/winfonts/FZXDXJW.TTF
lrwxrwxrwx 1 root root  42 12月 11 10:19 KaiTi_GB2312.ttf -> /usr/share/fonts/winfonts/KaiTi_GB2312.ttf
lrwxrwxrwx 1 root root  36 12月 11 10:19 msyhbd.ttc -> /usr/share/fonts/winfonts/msyhbd.ttc
lrwxrwxrwx 1 root root  35 12月 11 10:19 msyhl.ttc -> /usr/share/fonts/winfonts/msyhl.ttc
lrwxrwxrwx 1 root root  34 12月 11 10:19 msyh.ttc -> /usr/share/fonts/winfonts/msyh.ttc
lrwxrwxrwx 1 root root  37 12月 11 10:19 simfang.ttf -> /usr/share/fonts/winfonts/simfang.ttf
lrwxrwxrwx 1 root root  36 12月 11 10:19 simhei.ttf -> /usr/share/fonts/winfonts/simhei.ttf
lrwxrwxrwx 1 root root  36 12月 11 10:19 simkai.ttf -> /usr/share/fonts/winfonts/simkai.ttf
lrwxrwxrwx 1 root root  36 12月 11 10:19 simsun.ttc -> /usr/share/fonts/winfonts/simsun.ttc
lrwxrwxrwx 1 root root  36 12月 11 10:19 simyou.ttf -> /usr/share/fonts/winfonts/SIMYOU.TTF
lrwxrwxrwx 1 root root  42 12月 11 10:19 wqy-zenhei.ttc -> /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc

这是我的/usr/local/share/ghostscript/9.50/Resource/Init/cidfmap.local

...
/MicrosoftYaHei << /FileType /TrueType
/Path pssystemparams /GenericResourceDir get
(CIDFSubst/msyh.ttc) concatstrings
/SubfontID 0
/CSI [(GB1) 5] >> ;
/MicrosoftYaHei-Bold << /FileType /TrueType
/Path pssystemparams /GenericResourceDir get
(CIDFSubst/msyhbd.ttc) concatstrings
/SubfontID 0
/CSI [(GB1) 5] >> ;
/MicrosoftYaHeiLight << /FileType /TrueType
/Path pssystemparams /GenericResourceDir get
(CIDFSubst/msyhl.ttc) concatstrings
/SubfontID 0
/CSI [(GB1) 5] >> ;
/NSimSun << /FileType /TrueType
/Path pssystemparams /GenericResourceDir get
(CIDFSubst/simsun.ttc) concatstrings
/SubfontID 1
/CSI [(GB1) 5] >> ;
/SimHei << /FileType /TrueType
/Path pssystemparams /GenericResourceDir get
(CIDFSubst/simhei.ttf) concatstrings
/CSI [(GB1) 5] >> ;
/SimSun << /FileType /TrueType
/Path pssystemparams /GenericResourceDir get
(CIDFSubst/simsun.ttc) concatstrings
/SubfontID 0
/CSI [(GB1) 5] >> ;
...

我知道这个pdf需要一些带有中文字符的字体,但是ghostscript的配置文件是ascii文本,它不支持写成中文... 我注意到一些有趣的事情,当使用iText获取pdf的元数据时,中文字体名称变为以下格式:

fontTemp = /#bf#ac#cc#e5_GB2312
fontTemp = /#b7#bd#d5#fd#ba#da#cc#e5_GBK
fontTemp = /#b7#bd#d5#fd#cf#b8#b5#c8#cf#df#bc#f2#cc#e5
fontTemp = /STSong-Light

有谁知道如何用汉字添加CIDFont?

PDF/A 规范要求嵌入所有字体(事实上,所有 CIDFonts 都应该嵌入到 PDF 文件中(。您似乎根本没有向Ghostscript提供缺少的CIDFont,或者,如果您已将其添加到Ghostscript字体列表中,则尚未说明您为添加它所做的工作。

你需要创建一个 cidfmap 文件(你可以使用 ghostpdl/Resource/Init 中的那个(,并使用 -I 开关包含包含它的目录。最简单的解决方案是修改 ghostpdl/Resource/Init 中的那个,并将 -I/ghostpdl/Resource/Init 添加到命令行中。

显然,您添加的条目需要使丢失的字体文件的文件名正确。您几乎肯定也必须使用PostScript来创建名称,因为您必须使用二进制数据,可能包括0x20或0x00字符代码。

像这样:

<B9656B63C67E497BBF7E807B534F> cvn << ....>> ;

最新更新