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

Replace all font glyphs in a PDF by converting them to outline shapes

我正在寻找一种方法将 'outline' 全部 text/fonts 放入 PDF 文件中,即将它们转换为曲线。

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

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

您至少需要 9.15 版的 Ghostscript 才能获得此功能。请注意,PDF 文件几乎肯定会更大,并且 copy/paste/search 将(显然)不起作用。

是的,您可以使用 Ghostscript 来实现您想要的。

我。对于 9.14

以下的 Ghostscript 版本

您需要完成 2 个步骤:

  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
    

此方法长期不可靠,因为 Ghostscript 开发人员已声明 -dNOCACHE 可能不会出现在未来版本中。

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


二. Ghostscript 版本 9.15 或更高版本

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

 -dNoOutputFonts

这将导致输出设备 pdfwriteps2writeeps2write "to 'flatten' glyphs into 'basic' marking operations (rather than writing fonts to the output)".

这意味着:可以避免为 9.15 GS 之前的版本描述的两个步骤。只需一条命令即可获得所需的结果:

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

注意: 与第一部分中所述相同的警告是正确的。如果您的 PDF 包含图像,上面的简单命令行可能会引入不需要的副作用。为了避免这些,您需要添加更具体的参数。

三。 Ghostscript 版本 9.54.0 (Windows 10)

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

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

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

  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 具有例如当我在非 Adob​​e 设计软件中将它们导入为 PDF:s 时,一些字体字符出现了轻微但一致的错误。这些年来,我发现当矢量必须从一个软件保存到另一个软件时,EPS-文件格式是最可靠的格式之一。很多时候,使用另一个打印机驱动程序将 PDF 再次打印为 PDF 可能就足够了,或者使用 Ghostscript 更改单个文件格式,但并非总是如此。