Estou tentando converter arquivos PDF arbitrários (uma revista criada com o pdfLaTeX, contendo algumas fotos, mas também alguns gráficos, como webcomics) para validar o PDF / X-3 usando o Ghostscript e quero que o resultado seja em escala de cinza. monocromático. Eu não sei muito sobre os perfis de cores ICC e eu realmente não me importo com o gerenciamento de cores , então se isso é mais fácil sem os perfis ICC, então eu não me importo. Estou disposto a deixar a impressora fazer as coisas deles com o meu arquivo - não preciso da fidelidade absoluta das cores (especialmente porque estamos falando de escala de cinza aqui).
Estou tentando fazer isso funcionar usando a documentação do Ghostscript, seção “Criando um PDF / Documento X-3 ”. Com base nisso, minha tentativa é assim:
gs \
-dSAFER -sDEVICE=pdfwrite \
-dEmbedAllFonts \
-sProcessColorModel=DeviceGray \
-sColorConversionStrategy=Gray \
-dPDFX -dPDFACompatibilityPolicy=1 \
-o 'output.pdf' -f 'my_pdfx_def.ps' 'input.pdf'
Em que my_pdfx_def.ps
contém o seguinte, com base no modelo fornecido com o Ghostscript:
%!
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
[ /GTS_PDFXVersion (PDF/X-3:2002) % Must be so (the standard requires).
/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 (CGATS TR001) % 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
Isso é executado e produz um arquivo que parece superficialmente correto em meu visualizador de PDF. No entanto, não tenho certeza se isso é realmente suficiente (produzindo um documento PDF / X-3 válido / sensato), considerando a longa lista de coisas que devo fazer de acordo com a documentação do Ghostscript. Em particular, diz
To create a PDF/X-3 document from a Postscript or a PDF file, you should :
[…]
- Specify a PDF/X definition file before running the input document. It provides additional information to be included into the output document. A sample PDF/X definition file may be found in
gs/lib/PDFX_def.ps
.- If a registered printing condition is applicable, specify its identifier in the PDF/X definition file. Otherwise provide an ICC profile and specify it in the PDF/X definition file as explained below.
Eu tentei adaptar o arquivo PDFX_def.ps
menciona (veja acima), mas eu não sei o que é OutputCondition
ou o que eu devo colocar para isso.
Infelizmente, isso mal é documentado nos documentos do Ghostscript.
Tentei definir um arquivo .icc
em minha versão personalizada, mas não consegui que o Ghostscript localizasse esse arquivo. Independentemente de como, sempre recebi " Error: /invalidfileaccess in --file--
".
E qual perfil de cor eu estaria usando, afinal?
- Provide a
DefaultRGB
resource file in the ColorSpace resource category. Either define it in the PDF/X definition file, or provide a definition ofgs/Resource/ColorSpace/DefaultRGB
.gs/Resource/ColorSpace/DefaultRGB
is usually distributed with Ghostscript, its content may not necessarily satisfy your needs, see below.
Escusado será dizer que não especifica como fazer isso. Mas em qualquer caso, eu preciso disso, considerando que eu quero escala de cinza?
- Specify, using
-sOutputICCProfile
, an ICC profile which represents the color space (either CMYK or Gray) of the final file. This is the same ICC profile used in the PDF/X definition file as the ICCProfile. Even if you are using a standardOutputCondition
and do not need to specify an ICCProfile, you must still setOutputICCProfile
with an appropriate ICC profile in order for proper color conversion.
Bem, eu não especifiquei -sOutputICCProfile
e isso não causou nenhum dano.
Eu ainda deveria?
(Mais uma vez, de onde devo tirar o perfil ICC?)
Tags pdf ghostscript icc color-profiles