Ghostscript ps2write处理Type1C字体生成Type3位图字体是否为预期行为?
Ghostscript ps2write处理Type1C字体生成Type3位图字体的原因分析
使用Ghostscript的ps2write设备处理含TrueType或Type1字体的文档时表现正常,但处理含Type1C字体的文档时,会生成Type3位图字体。以下说明这是否为预期行为及背后原因。
复现步骤
- 创建最小化TeX文档:
\documentclass{article} \begin{document} Test \end{document} - 编译为PDF(生成含Type1字体的文档):
pdflatex document.tex - 转换为PostScript再转回PDF(生成含Type1C字体的文档):
gs -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=document.ps -f document.pdf gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -o restore1.pdf document.ps - 重复转换操作(生成含Type3位图字体的文档):
gs -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=restore1.ps -f restore1.pdf gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -o restore2.pdf restore1.ps
各文档的字体信息
$ pdffonts original.pdf name type encoding emb sub uni object ID ------------------------------------ ----------------- ---------------- --- --- --- --------- EVFUHE+NimbusRomNo9L-Regu Type 1 Custom yes yes yes 4 0 $ pdffonts restore1.pdf name type encoding emb sub uni object ID ------------------------------------ ----------------- ---------------- --- --- --- --------- QHWNWY+CMR10 Type 1C WinAnsi yes yes no 7 0 $ pdffonts restore2.pdf name type encoding emb sub uni object ID ------------------------------------ ----------------- ---------------- --- --- --- --------- [none] Type 3 Custom yes no yes 11 0
使用的软件版本
$ gs --version 10.01.2 $ pdflatex --version | head -1 pdfTeX 3.141592653-2.6-1.40.24 (TeX Live 2022)
原因分析
这是预期行为,核心原因如下:
- PostScript规范的原生支持限制:Type1C(压缩Type1字体,又称CIDFontType0C)是PDF特有的字体格式,PostScript语言规范并未原生支持该格式。ps2write作为生成PostScript文档的设备,无法直接将Type1C字体转换为PostScript兼容的字体类型(如Type1、TrueType)。
- Fallback渲染机制:当Ghostscript遇到无法直接转换的字体格式时,会触发 fallback 逻辑,将字体渲染为Type3位图字体。Type3是PostScript支持的一种位图化字体格式,虽能保证文档显示一致性,但字体不再是矢量格式,缩放时易失真且文件体积会增大。
- 两次转换的差异:第一次转换时,原PDF含Type1字体,ps2write可正常将其转为PostScript支持的格式,后续pdfwrite设备会将其压缩为Type1C以优化体积;第二次转换时输入的PDF含Type1C字体,ps2write无法处理,只能转为Type3位图字体,最终转回PDF时保留该格式。
内容的提问来源于stack exchange,提问作者Stefan Schmidt
相关产品推荐
相关产品推荐

