是的,您可以使用Ghostscript来实现您想要的功能。
您需要经过2个步骤:
将PDF转换为PostScript文件,但使用一个相对不太知名的参数的副作用:-dNOCACHE
。这将把所有已使用的字体转换为轮廓形状:
gs -o somepdf.ps -dNOCACHE -sDEVICE=pswrite somepdf.pdf
将PS文件转换回PDF文件(如果需要,可以再次删除中间的PS文件):
gs -o somepdf-with-outlines.pdf -sDEVICE=pdfwrite somepdf.ps
rm somepdf.ps
这种方法不够可靠,因为Ghostscript开发人员已经表示-dNOCACHE
可能在未来的版本中不存在。
注意: 生成的PDF文件很可能比原始文件大。此外,如果没有额外的命令行参数,原始PDF中的所有图像也很可能根据Ghostscript内置默认值进行处理,这可能会导致不良影响。增加更多的命令行参数以进行其他处理可以避免这些副作用。
Ghostscript 9.15 版本(于2014年9月发布)支持一个新的命令行参数:
-dNoOutputFonts
这将导致输出设备pdfwrite
,ps2write
和eps2write
将字形“压扁”成“基本”的标记操作(而不是将字体写入输出)。
这意味着:可以避免预9.15 GS版本中描述的两个步骤。只需一个命令即可实现所需的结果:
gs -o file-with-outlines.pdf -dNoOutputFonts -sDEVICE=pdfwrite file.pdf
注:与第一部分已经注意到的相同,如果您的PDF包含图像,则上面的简单命令行可能会引入不必要的副作用。为了避免这些问题,您需要添加更具体的参数。
-dNoOutputFonts
添加一个相关文档参考。但请注意,由Ghostscript创建的新输出PDF文件默认设置下不一定更加“智能”(从臃肿的输入PDF获得更小、更优化的文件)。另请参见 如何使用ghostscript删除PDF中的重复对象?。 - samm这个提交记录为Ghostscript的pdfwrite和ps2write设备添加了一个新的开关-dNoOutputFonts
,它将生成一个PDF文件(或后缀为选定设备的PostScript文件),其中所有字形都是矢量图形,而不是文本。
您至少需要Ghostscript 9.15版本才能使用此功能。请注意,PDF文件几乎肯定会更大,复制/粘贴/搜索将(显然)无法使用。
页面:
...
第3页 124 0 R => 图像流
第4页 171 0 R => 图像流
...
XRef:
...
124 => 图像流
171 => 图像流
...
- sammgs -o book.vectored.pdf -dNoOutputFonts -sDEVICE=pdfwrite book.optimized.pdf
,生成了300多页的PDF。我对book.vectored.pdf使用了与book.optimized.pdf相同的优化算法,可以将其大小减小10 MB。 - samm我找到了一种方法,可以将所有字体完美地保留为向量,而且没有任何视觉错误,只需两个打印步骤,在正确安装和配置Ghostscript之后。
(注意!您必须将Ghostscript bin-/和lib文件夹添加到Windows PATH中,才能让Ghostscript执行任何操作) 此处有说明
使用Acrobat Reader和Microsoft PS Class Driver将包含矢量字体或其他矢量元素的PDF文件打印到YourFile.prn
文件中。(安装此驱动程序--控制面板-设备-打印机和扫描仪-添加打印机或扫描仪--让Windows先查找一段时间连接的打印机,当它停止时选择一个选项--我想要的打印机未列出-添加本地打印机或网络打印机,手动设置-下一步-使用现有端口:>文件:(打印到文件)-下一步-Microsoft:Microsoft PS Class Driver-下一步)
打开命令提示符,导航到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
要使用那个批处理文件,你只需要输入:prn2eps YourFile
。(注意!你必须将批处理文件和Yourfile.prn放在同一个目录下)
由于某种原因,在Windows 10中,最新的Ghostscript ps2epsi
函数无法正常工作,并且Adobe制作的PDF文件在我将它们导入非Adobe设计软件作为PDF文件时,某些字体字符存在一些小但一致的错误。多年来,我发现EPS文件格式是保留矢量图形从一个软件到另一个软件最可靠的格式之一。许多时候,仅使用另一个打印机驱动程序再次将PDF打印为PDF可能足够,或者使用Ghostscript进行单个文件格式更改,但并非总是如此。