Как создать правильный (в градациях серого) файл PDF/X-3 с помощью Ghostscript
Я пытаюсь преобразовать произвольные файлы PDF (журнал, созданный с помощью pdfLaTeX, содержащий несколько фотографий, а также некоторые графические объекты, такие как веб-комиксы) в действительный PDF/X-3 с использованием Ghostscript, и я хочу, чтобы результат был в градациях серого / монохромном режиме. Я не знаю много о цветовых профилях ICC, и в любом случае меня не волнует управление цветом, так что если это проще без профилей ICC, то я не против. Я готов позволить принтеру сделать свое дело с моим файлом - мне не нужна абсолютная точность цветопередачи (тем более, что здесь мы говорим о оттенках серого).
Я пытался заставить его работать, используя документацию Ghostscript, раздел "Создание документа PDF/X-3". Исходя из этого, моя попытка выглядит так:
gs \
-dSAFER -sDEVICE=pdfwrite \
-dEmbedAllFonts \
-sProcessColorModel=DeviceGray \
-sColorConversionStrategy=Gray \
-dPDFX -dPDFACompatibilityPolicy=1 \
-o 'output.pdf' -f 'my_pdfx_def.ps' 'input.pdf'
куда my_pdfx_def.ps
содержит следующее, основанное на шаблоне, который поставляется с 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
Это действительно запускает и производит файл, который внешне выглядит нормально в моей программе просмотра PDF. Однако я не уверен, что этого на самом деле достаточно (создание правильного / разумного документа PDF/X-3), учитывая длинный список того, что я должен делать в соответствии с документацией Ghostscript. В частности это говорит
Чтобы создать документ PDF/X-3 из Postscript или PDF-файла, вам необходимо:
[...]
- Укажите файл определения PDF / X перед запуском входного документа. Он предоставляет дополнительную информацию для включения в выходной документ. Пример файла определения PDF / X можно найти в
gs/lib/PDFX_def.ps
,- Если зарегистрированное условие печати применимо, укажите его идентификатор в файле определения PDF / X. В противном случае предоставьте профиль ICC и укажите его в файле определения PDF / X, как описано ниже.
Я пытался адаптировать файл PDFX_def.ps
это упоминает (см. выше), но я не знаю, что OutputCondition
или что я должен положить для этого. К сожалению, это едва документировано в документации Ghostscript. Я пытался установить .icc
файл в моей настроенной версии, но Ghostscript не смог найти этот файл - несмотря ни на что, я всегда получалError: /invalidfileaccess in --file--
". И какой цветовой профиль я бы использовал?
- Обеспечить
DefaultRGB
файл ресурсов в категории ресурсов ColorSpace. Либо определите его в файле определения PDF / X, либо предоставьте определениеgs/Resource/ColorSpace/DefaultRGB
,gs/Resource/ColorSpace/DefaultRGB
обычно распространяется вместе с Ghostscript, его содержание не обязательно может удовлетворить ваши потребности, см. ниже.
Само собой разумеется, это не определяет, как сделать это. Но в любом случае, мне даже нужно это, учитывая, что я хочу оттенки серого?
- Укажите, используя
-sOutputICCProfile
профиль ICC, представляющий цветовое пространство (CMYK или серый) конечного файла. Это тот же профиль ICC, используемый в файле определения PDF / X, что и ICCProfile. Даже если вы используете стандартOutputCondition
и не нужно указывать ICCProfile, вы все равно должны установитьOutputICCProfile
с соответствующим профилем ICC для правильного преобразования цвета.
Ну я не уточнил -sOutputICCProfile
и это, похоже, не принесло никакого вреда. Должен ли я все еще?
(Опять же, откуда я должен вытащить профиль ICC?)