使用 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 可能无法更改它们。
我的最终目标是了解我的 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 可能无法更改它们。