为什么 Ghostscript 无法识别我生成的 'cidfmap' 文件?

Why won't Ghostscript recognize my generated 'cidfmap' file?

(在 Windows 10 上使用 Ghostscript 9.27)

我没问题 运行 在我的 PDF 上使用以下 Ghostscript 命令; Resources/Init 中的默认 'cidfmap' 文件被拾取得很好:

gswin64c.exe -I"C:/Program Files/gs/ghostscript-9.27/Resource/Init" -sDEVICE=pdfwrite -dNODISPLAY -dPDFSETTINGS=/printer -dPDFSTOPONERROR -dBATCH -dNOPAUSE -sOutputFile=output.pdf input.pdf

但是,当我要使用生成的'cidfmap'文件时(使用mkcidfm.ps脚本),它只想使用默认值,而不会使用生成的'cidfmap'文件。我正在尝试的新命令是:

gswin64c.exe -I"C:/Program Files/gs/ghostscript-9.27/Resource/Init" -sCIDFMAP="C:/Temp/cidfmap" "C:/Program Files/gs/ghostscript-9.27/lib/mkcidfm.ps" -sDEVICE=pdfwrite -dNODISPLAY -dPDFSETTINGS=/printer -dPDFSTOPONERROR -dBATCH -dNOPAUSE -sOutputFile=output.pdf input.pdf

我试过将 "C:\Temp" 添加到 -I 参数中的目录列表中,但没有成功。

我到底做错了什么?

基本答案是没有Ghostscript命令行开关'CIDFMAP'。

Ghostscript 命令行控制的工作方式是,解释器或设备无法识别的任何开关都被假定为 PostScript 变量。这些变量在 systemdict 中定义,这使得它们可用于任何可能想要使用它们的 PostScript 程序。许多随 Ghostscript 提供的实用程序都使用了此功能。

-sCIDFMAP 的唯一用途是将参数传递给 mkcidfm.ps PostScript 程序,该程序告诉该程序存储生成的 cidfmap 的输出文件的名称。

所以你需要做的是在 Resource/Init 目录中生成 cidfmap,或者将它复制到那里,或者告诉 Ghostscript 使用 -I 将你正在生成它的目录添加到搜索路径中。最可靠的方法是将其放入 /Resource/Init.

我认为(但这不是我的领域)Ghostscript 将查找 first cidfmap 文件并使用它,因此如果您将资源文件放在目录之前你的 cidfmap 在里面然后它会首先找到它们。您可以尝试交换搜索顺序,但我个人认为这有风险。如果您打算使用磁盘资源,那么只需将 cidfmap 放在那里。