1

Я пытаюсь преобразовать произвольные файлы 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 ресурсов 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 из?)

0