使用 Ghostscript 从 PDF 中提取 cmyk 和专色分离

Extracting cmyk and spot separations from PDF with Ghostscript

我的最终目标是了解我的 PDF 中每个分色的油墨覆盖率 (sDEVICE=ink_cov),包括专色和 cmyk。我试图将它们作为单独的灰度文件提取出来,以便我可以使用 ink_cov 处理它们,但每次我 运行 我的脚本都会得到 --nostringval--。我尝试了各种组合来命名频道,但没有任何效果。这是我的脚本:

gswin64c -dBATCH -dNOPAUSE -sDEVICE=tiffsep -c -sOutputFile=C:\gsfiles\myseps.tiff "<< /SeparationColorNames [/Process Cyan /Process Magenta /Process Yellow /Process Black /myspotred] >> setpagedevice" myspotred.pdf 

这是结果

Error: /undefinedfilename in (<< /SeparationColorNames [/Process Cyan /Process Magenta /Process Yellow /Process Black /myspotred] >> setpagedevice)
Operand stack:

Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push
Dictionary stack:
   --dict:738/1123(ro)(G)--   --dict:0/20(G)--   --dict:75/200(L)--
Current allocation mode is local
Last OS error: Invalid argument
GPL Ghostscript 9.52: Unrecoverable error, exit code 1

这是acrobat中的文件 Acrobat view of separations

感谢您的帮助

您不需要弄乱 SeparationColorNames。

即使您这样做了,您也需要指定 /Cyan 而不是 Cyan。 PostScript 世界根本没有 /Process 键,那是 NChannel,它是 PDF 特有的,PostScript 不支持它。

您将 -c 放在了错误的位置(在 -sOutputFile 之前,而不是在实际的 PostScript 之前)。幸运的是,这随后被 -sOutputFile 否定。然而,这意味着您的 PostScript 片段不会被视为 PostScript(因为这就是 -c 的意思并且 -c 由 -s 终止)。所以那块 PostScript 被视为文件名,这就是为什么你会得到一个未定义的文件名错误。

要获得所有的分离,只需执行:

gswin64c -sDEVICE=tiffsep -o C:\gsfiles\myseps%d.tiff myspotred.pdf

如果您真的想指定分色名称,那么:

gswin64c -sDEVICE=tiffsep -o C:\gsfiles\myseps%d.tiff -c "<< /SeparationColorNames [/myspotred] >> setpagedevice" -f myspotred.pdf

应该足够了,Process 着色剂由设备的 ProcessColorModel 给出,在本例中为 CMYK。您没有在 SeparationColorNames 数组中输入 Process 着色剂,这是因为它们不是分色色。

请注意(对于一般 PostScript)真实的物理设备可能不允许您更改着色剂,它们是只读的。因此,您可以通过 currentpagedevice 检索它们,但 setpagedevice 可能无法更改它们。