Mac环境下PDF转EPS如何避免栅格化且不替换原有字体
PDF转EPS无损转换方案(无栅格化、保留原始字体)
Inkscape字体替换问题修复
旧转换命令出现Times New Roman被替换为无衬线字体的问题,核心原因有两个:一是Inkscape默认内置PDF导入器的字体映射逻辑对matplotlib嵌入的字体识别兼容性差;二是Mac端Inkscape默认不会全局扫描全路径系统字体,缺失对应字重时会自动兜底替换为无衬线字体。
使用修正后的命令即可解决:
inkscape input.pdf --pdf-poppler --export-filename=output.eps
如果执行后仍存在字体替换,按两点排查即可:
- 将Times New Roman全套字重(常规、斜体、粗体、粗斜体)放到
~/Library/Fonts/用户字体目录,不要仅存放在系统根目录的字体文件夹,重启Inkscape后再执行转换 - 如果不需要保留EPS内文本的可编辑性,可以在命令末尾添加
--export-text-to-path参数,将所有文字转为矢量路径,从根源杜绝字体替换问题,不会损失矢量精度
Ghostscript栅格化问题修复
旧Ghostscript命令输出内容栅格化,核心是两处参数错误:一是多余的-dNOCACHE参数会干扰新版本Ghostscript的字体、路径渲染逻辑;二是eps2write设备默认会将所有带透明属性的元素直接栅格化,以适配老版本EPS的格式规范。
使用修正后的命令即可输出全矢量、字体完整嵌入的EPS文件:
gs -q -dNOPAUSE -dBATCH -dSAFER -dEPSCrop -dCompatibilityLevel=1.4 -dAutoRotatePages=/None -dHaveTrueTypes=true -dEmbedAllFonts=true -dSubsetFonts=false -sDEVICE=eps2write -sOutputFile=output.eps input.pdf
如果PDF包含透明效果(matplotlib默认生成的科研图一般无复杂透明),在命令中添加
-dNOTRANSPARENCY参数即可,程序会自动将透明混合转换为EPS兼容的矢量填充叠加,不会触发整页栅格。
matplotlib源文件的零损耗最优方案
如果待转换的PDF是通过matplotlib生成的,完全不需要走二次转换流程,直接在导出环节输出EPS即可从根源避免所有转换损耗,导出参考参数如下:
plt.savefig('output.eps', format='eps', bbox_inches='tight', fonttype=42, # 以Type42格式嵌入TrueType字体,无字体替换问题 dpi=1200) # 仅对文件内嵌入的位图元素生效,矢量文字、路径不受影响
内容的提问来源于stack exchange,提问作者Wolpertinger
相关产品推荐
相关产品推荐

