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

时间:2015-03-01 18:36:24

标签: pdf fonts pdf-generation ghostscript mupdf

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

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

3 个答案:

答案 0 :(得分:26)

是的,你可以使用Ghostscript来实现你想要的目标。

予。对于Ghostscript版本高达9.14

您需要完成两个步骤:

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

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

    gs -o somepdf-with-outlines.pdf -sDEVICE=pdfwrite somepdf.ps
    
    rm somepdf.ps
    
  3. 此方法长期不可靠,因为Ghostscript开发人员声明-dNOCACHE可能在将来的版本中不存在。

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


    II。 Ghostscript版本9.15或更新

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

     -dNoOutputFonts
    

    这会导致输出设备pdfwriteps2writeeps2write “将'变平'字形转换为'基本'标记操作(而不是将字体写入输出) “

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

     gs -o file-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite file.pdf
    

    注意: 同样的警告是正确的,如第一部分所述。如果您的PDF包含图像,可能会有简单的副作用上面的命令行。要避免这些,您需要添加更多特定参数。

答案 1 :(得分:7)

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

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

答案 2 :(得分:0)

三。 Ghostscript 版本 9.54.0 (Windows 10)

我找到了一种方法,可以在首次安装和正确配置 Ghostscript 后,将所有字体完美地保留为矢量,而不会出现任何视觉错误,并且只需两个打印步骤。

(注意!您必须将 Ghostscript bin-/ 和 lib-文件夹添加到 Windows PATH 中才能让 Ghostscript 执行任何操作) Instructions here

  1. 使用 Acrobat Reader 并使用 Microsoft PS Class Driver 将包含基于矢量的字体或其他矢量元素的 PDF 文件打印到 YourFile.prn 文件。 (要安装此驱动程序——控制面板——设备——打印机和扫描仪——添加打印机或扫描仪——首先让 Windows 寻找连接的打印机,当它停止时选择一个选项——我想要的打印机未列出 - 添加手动设置的本地打印机或网络打印机 - 下一步 - 使用现有端口:> 文件:(打印到文件) - 下一步 - Microsoft:Microsoft PS 类驱动程序 - 下一步)

  2. 打开命令提示符,导航到 YourFile.prn 文件所在的文件夹并输入:"C:\Program Files\gs\gs9.54.0\bin\gswin64c.exe" -dNOPAUSE -dNOCACHE -dBATCH -sDEVICE=eps2write -sOutputFile=YourFile.eps YourFile.prn

如果您经常需要这样做,您还可以创建包含以下内容的 prn2eps.bat 文件:

"C:\Program Files\gs\gs9.54.0\bin\gswin64c.exe" -dNOPAUSE -dNOCACHE -dBATCH -sDEVICE=eps2write -sOutputFile=%1.eps %1.prn

要使用该 bat 文件,您只需键入:prn2eps YourFile(注意!bat文件和Yourfile.prn必须在同一个目录下)

由于某种原因,最新的 Ghostscript ps2epsi 函数在 Windows 10 中不起作用,而 Adob​​e 制作了 PDF:s,例如当我将它们作为 PDF:s 导入到非 Adob​​e 设计软件中时,某些字体字符中存在轻微但一致的错误。多年来,我发现当矢量必须从一个软件保存到另一个软件时,EPS 文件格式是最可靠的格式之一。很多时候,仅使用另一个打印机驱动程序将 PDF 再次打印为 PDF 可能就足够了,或者使用 Ghostscript 更改单个文件格式,但并非总是如此。