Ghostscript /AlwaysOutline命令无效:如何指定字体转轮廓?
问题分析与解决方案
你的核心问题是:Ghostscript的AlwaysOutline参数无法针对PDF中的CID Type0字体生效,原因是Type0复合字体的匹配逻辑和普通字体不同,而非命令本身不可用。以下是具体分析和解决步骤:
关键原因:Type0字体的结构特殊性
你的PDF中所有字体都是CID TrueType(Type0复合字体),这类字体由外层Type0字体容器和内层CIDFont组成。AlwaysOutline参数默认匹配的是内层CIDFont的名称,而非pdffonts或pdfalyze显示的外层字体引用名(如CIGRAP+NotoSans)。
解决步骤
1. 获取Ghostscript识别的CIDFont真实名称
执行以下命令,输出PDF中所有字体的内部调试信息:
gs -sDEVICE=pdfwrite -o /dev/null -dPrintFonts -f input.pdf
在输出结果中找到目标字体(比如你要处理的彩色Emoji字体NotoSansSymbols2),定位类似如下的行:
CIDFont: NotoSansSymbols2 (CID: 0)
这里的NotoSansSymbols2就是Ghostscript需要匹配的CIDFont名称。
2. 修正AlwaysOutline命令
针对CIDFont,需要用(字体名称) cvn将字符串转换为名称对象,确保Ghostscript能正确匹配。比如要轮廓化NotoSansSymbols2,命令应为:
gs -sDEVICE=pdfwrite -o out.pdf -c "<< /AlwaysOutline [(NotoSansSymbols2) cvn] >> setdistillerparams" -f input.pdf
如果需要同时处理多个字体,只需在列表中添加对应的项:
gs -sDEVICE=pdfwrite -o out.pdf -c "<< /AlwaysOutline [(NotoSansSymbols2) cvn (NotoSans) cvn] >> setdistillerparams" -f input.pdf
3. 彩色Emoji字体的额外处理
如果目标是彩色Emoji字体(如NotoSansSymbols2),它通常包含COLR/CPAL彩色表,轮廓化时可添加参数保留颜色信息:
gs -sDEVICE=pdfwrite -o out.pdf -dPreserveOverprintSettings=true -c "<< /AlwaysOutline [(NotoSansSymbols2) cvn] >> setdistillerparams" -f input.pdf
验证结果
处理完成后,用pdffonts检查输出PDF:
pdffonts out.pdf
若目标字体已被轮廓化,它会从字体列表中消失(或显示为无嵌入字体的条目)。
内容的提问来源于stack exchange,提问作者Alexander C
相关产品推荐
相关产品推荐

