我有一些sRGB PDF数据,我正在尝试将其转换为CMYK EPS以获取已接受的论文。由于我没有看到任何帖子一步解释整个过程,我决定先做sRGB PDF - > CMYK PDF和CMYK PDF - > CMYK EPS。第二步是我遇到困难的地方,但我会将完整程序包括在内。
我使用下面的图来说明我的问题,其中第一个是输入。这三个数字位于zip文件https://www.dropbox.com/s/7wr84bqhp3rzagg/figs.zip?dl=0
中我将使用这些数字以方便其他问题。几个小时后,我终于能够通过组合Converting PDF to CMYK (with identify recognizing CMYK)的答案将sRGB PDF(1)转换为CMYK PDF(2)。最难的部分是让'识别'检测到新的PDF实际上是CMYK。我使用Chris Hecker的hacky技巧让这个转换步骤起作用。然后我用命令调用识别:
identify -format '%[colorspace]' figure_1_cmyk.pdf
它说CMYK,到目前为止一直很好。我认为下一步应该很简单,只需将CMYK PDF转换为CMYK EPS即可。但这是我真正陷入困境的地方。我在(2)上使用以下bash脚本'pdf2eps.sh'来获取(3)。
#!/bin/bash
gs \
-dNOPAUSE \
-dNOCACHE \
-dBATCH \
-dNOSUBSTDEVICECOLORS \
-sDEVICE=eps2write \
-sOutputFile="${1%%.pdf}.eps" \
"$1"
无论是否带有'-dNOSUBSTDEVICECOLORS'标志,生成的.eps文件(3)都会以某种方式恢复为'识别'检测到的sRGB。您可以使用提供的数字自行检查。我真的不知道我能尝试什么,但我对ghostscript也很新。如果有比我更多知识的人能告诉我如何获得(3)成为CMYK,我将非常感激。
难道识别只是错误吗?我不知道使用linux工具检查(3)实际上是否是CMYK的其他方法。如果有更简单的方法可以获得高质量的sRGB PDF到CMYK EPS,我当然会感兴趣。命令行工具'convert'对我没有好处。
此致 BRAM
P.S。自从其中一个答案中提出请求后,我用于第一步的代码(RGB PDF - > CMYK PDF)如下:
bash脚本
#!/bin/bash
gs \
-dPDFX \
-dBATCH \
-dNOPAUSE \
-dNOOUTERSAVE \
-dPDFSETTINGS=/prepress \
-dCompatibilityLevel=1.5 \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK \
-sProcessColorModel=DeviceCMYK \
-dHaveTransparency=false \
-sOutputFile="${1%%.pdf}_cmyk.pdf" \
PDFX_def_fogra39_trickcmyk.ps \
"$1"
添加了文件'PDFX_def_fogra39_trickcmyk.ps'
%!
% $Id$
% This is a sample prefix file for creating a PDF/X-3 document.
% Feel free to modify entries marked with "Customize".
% This assumes an ICC profile to reside in the file (ISO Coated sb.icc),
% unless the user modifies the corresponding line below.
systemdict /ProcessColorModel known {
systemdict /ProcessColorModel get dup /DeviceGray ne exch /DeviceCMYK ne and
} {
true
} ifelse
{ (ERROR: ProcessColorModel must be /DeviceGray or DeviceCMYK.)=
/ProcessColorModel cvx /rangecheck signalerror
} if
% Define entries to the document Info dictionary :
% /ICCProfile (/usr/share/color/icc/ISOcoated_v2_300_eci.icc) def % Customize or remove.
[ /GTS_PDFXVersion (PDF/X-3:2002) % Must be so (the standard requires).
/Title (Title) % Customize.
/Trapped /False % Must be so (Ghostscript doesn't provide other).
/DOCINFO pdfmark
% Define an ICC profile :
currentdict /ICCProfile known {
[/_objdef {icc_PDFX} /type /stream /OBJ pdfmark
[{icc_PDFX} <</N systemdict /ProcessColorModel get /DeviceGray eq {1} {4} ifelse >> /PUT pdfmark
[{icc_PDFX} ICCProfile (r) file /PUT pdfmark
} if
% Define the output intent dictionary :
[/_objdef {OutputIntent_PDFX} /type /dict /OBJ pdfmark
[{OutputIntent_PDFX} <<
/Type /OutputIntent % Must be so (the standard requires).
/S /GTS_PDFX % Must be so (the standard requires).
/OutputCondition (Commercial and specialty printing) % Customize
/Info (none) % Customize
/OutputConditionIdentifier (FOGRA39) % Customize
/RegistryName (http://www.color.org) % Must be so (the standard requires).
currentdict /ICCProfile known {
/DestOutputProfile {icc_PDFX} % Must be so (see above).
} if
>> /PUT pdfmark
[{Catalog} <</OutputIntents [ {OutputIntent_PDFX} ]>> /PUT pdfmark
[/_objdef {OutputIntent_PDFX} /type /dict /OBJ pdfmark
[{OutputIntent_PDFX} <<
/ColorSpace /DeviceCMYK % convince ImageMagick's identify that it's CMYK
/Type /OutputIntent % Must be so (the standard requires).
/S /GTS_PDFX % Must be so (the standard requires).
/OutputCondition (Commercial and specialty printing) % Customize
/Info (none) % Customize
/OutputConditionIdentifier (CGATS TR 003) % Customize
/RegistryName (http://www.color.org) % Must be so (the standard requires).
currentdict /ICCProfile known {
/DestOutputProfile {icc_PDFX} % Must be so (see above).
} if
>> /PUT pdfmark
[{Catalog} <</OutputIntents [ {OutputIntent_PDFX} ]>> /PUT pdfmark
答案 0 :(得分:0)
好的,首先你使用稍微旧版本的Ghostscript(9.18),当前版本是9.20,9.21将很快发布。
其次;你可以一步完成整个工作。您还没有说明用于创建CMYK PDF的命令行,但如果在该命令行中使用eps2write而不是pdfwrite,则应该获得CMYK EPS而不是CMYK PDF。这两个设备实际上共享99%以上的代码,大多数命令行交换机与这两个设备的工作方式相同。
NOSUBSTDEVICECOLORS开关基本上是合法的,现在根本就不应该使用。
最后;您还没有充分的理由认为EPS文件不 CMYK。我找不到&#39;识别&#39;在这里成为一个有用的工具。检测PostScript程序中使用的颜色空间的唯一方法是完全解释它,并且识别不是PostScript解释器!我猜它会使用Ghostscript来渲染EPS,而图像的颜色空间将取决于Ghostscript设备用于渲染。
查看输出文件,我看到颜色是使用:
指定的0.875 0.765625 0 0 k
0.875 0.765625 0 0 K
/ k和/ K定义为:
/k/setcmykcolor load def
/K/setcmykcolor load def
如果文件使用的是RGB颜色,那么您可能希望看到&#34; r g b rg&#34;或者&#34; r g b RG&#34;,它们都不存在于EPS文件的正文中。
所以是的,它的识别是错误的,虽然我并不特别责怪它,我相信它的用途实际上是用于位图图像,而不是高级页面描述语言。如上所述,如果您使用命令行来创建CMYK PDF并将设备设置为eps2write,您应该只需一步即可获得CMYK EPS。请注意,由于EPS旨在包含在其他程序中,因此它不能包含多个页面,因此如果您从多页输入开始,则应使用&#39;%d&#39; filename语法,用于获取多个EPS文件,每页一个。
修改强> 这里的大部分内容都是多余的,或者在创建中间文件时可能有害:
gs \
-dPDFX \
-dBATCH \
-dNOPAUSE \
-dNOOUTERSAVE \
-dPDFSETTINGS=/prepress \
-dCompatibilityLevel=1.5 \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK \
-sProcessColorModel=DeviceCMYK \
-dHaveTransparency=false \
-sOutputFile="${1%%.pdf}_cmyk.pdf" \
PDFX_def_fogra39_trickcmyk.ps \
"$1"
制作PDF / X限制了PDF文件的允许构造,这意味着当您不必要时,您将回到较低级别的默认值。如果您没有设置PDF / X,那么您不需要PDF / X_def.ps文件,因为所有操作都设置为默认值。
你不需要设置-dHaveTransparency = false,首先是因为它包含在PDF / X代码中,其次是因为PostScript不支持透明度,所以如果你直接去也为你照顾的EPS。
你不应该使用任何 PDFSETTINGS,除非你有充分的理由(并且可以向我解释; - )
限制PDF级别(并且pdfwrite无法使用大于1.5的功能创建PDF)
不要使用NOOUTERSAVE,在这种情况下所做的一切都会让你失去性能....
使用当前代码,如果您设置ColorConversionStrategy,那么它会为您设置ProcessColorModel,因此您也不需要这样做。
我建议:
gs \
-dBATCH \
-dNOPAUSE \
-sDEVICE=eps2write \
-sColorConversionStrategy=CMYK \
-sOutputFile="${1%%.pdf}_cmyk.eps" \
"$1"