通过将PDF转换为轮廓形状替换PDF中的所有字体字形

Sza*_*lcs 15 pdf fonts pdf-generation ghostscript mupdf

我正在寻找一种方法来"概述" PDF文件中所有文本/字体,即将它们转换为曲线.

我更愿意这样做而无需将PDF转换为PostScript并返回.此外,我想使用可以从命令行自动执行的免费轻量级跨平台工具,例如Ghostscript或MuPDF.

Kur*_*fle 29

是的,你可以使用Ghostscript来实现你想要的.

I.对于Ghostscript版本高达9.14

您需要完成两个步骤:

  1. 将PDF转换为PostScript文件,但使用相对未知参数的副作用:调用它-dNOCACHE.这会将所有使用的字体转换为轮廓形状:

    gs -o somepdf.ps -dNOCACHE -sDEVICE=pswrite somepdf.pdf
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将PS转换回PDF(并且可能再次删除中间PS):

    gs -o somepdf-with-outlines.pdf -sDEVICE=pdfwrite somepdf.ps
    
    rm somepdf.ps
    
    Run Code Online (Sandbox Code Playgroud)

这种方法长期不可靠,因为Ghostscript开发人员声称-dNOCACHE可能不会出现在未来的版本中.

注意:生成的PDF很可能比原始PDF大.此外,如果没有其他命令行参数,原始PDF中的所有图像都可能会根据Ghostscript内置默认值进行处理.这可能导致不必要的副作用.通过添加更多命令行参数可以避免这些副作用.


II.Ghostscript版本9.15或更新版本

Ghostscript版本9.15(2014年9月发布)支持新的命令行参数:

 -dNoOutputFonts
Run Code Online (Sandbox Code Playgroud)

这将导致输出设备pdfwrite,ps2writeeps2write "将'字形变平'为'基本'标记操作(而不是将字体写入输出)".

这意味着:可以避免为9.15之前版本描述的两个步骤.只需一个命令即可实现所需的结果:

 gs -o file-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite file.pdf
Run Code Online (Sandbox Code Playgroud)

注意:同样的警告是正确的,如第一部分中已经提到的.如果您的PDF包含图像,则上面的简单命令行可能会产生不必要的副作用.要避免这些,您需要添加更多特定参数.


Ken*_*enS 7

提交-dNoOutputFonts为Ghostscript pdfwrite和ps2write设备添加了一个新开关,它将生成PDF文件(或PostScript,具体取决于所选设备),其中所有字形都已创建为矢量,而不是文本.

您至少需要9.15版Ghostscript才能获得此功能.请注意,PDF文件几乎肯定会更大,复制/粘贴/搜索(显然)不起作用.