Ghostscript PDF / A преобразование не проходит проверку

4695
Mark Berry

Я разрабатываю «безбумажный» рабочий процесс и планирую сохранить все файлы в формате PDF / A-1b.

Я пытаюсь разработать простой пакетный файл для преобразования PDF-файлов, которые я создаю или получаю в PDF / A-1b. Исходя из этого ответа, у меня есть следующий пакетный файл:

gswin32c ^ -dPDFA ^ -dNOOUTERSAVE ^ -sProcessColorModel=DeviceCMYK ^ -dUseCIEColor ^ -sDEVICE=pdfwrite ^ -o %2 ^ -dPDFACompatibilityPolicy=1 ^ "C:\Program Files (x86)\gs\gs9.07\mylib\PDFA_def.ps" ^ %1 

В PDFA_def.ps я пробовал несколько разных профилей ICC, в том числе один в своей системе

C:/Windows/System32/spool/drivers/color/CalibratedDisplayProfile-5.icc 

и sRGB_IEC61966-2-1_no_black_scaling.iccот color.org .

Мой тестовый входной файл представляет собой одностраничное электронное письмо, напечатанное из Microsoft Outlook 2010 с использованием CutePDF 2.8 (в котором используется Ghostscript 8.15).

После конвертации с моим пакетным файлом и Ghostscript 9.07 Adobe Reader считает, что вывод PDF / A, но проверка PDF / A-1b на pdf-tools.com завершается неудачно с сообщением «Значение ключа N равно 4, но должно быть 3 «.

Я проследил это до следующей конструкции в выходном файле PDF:

<</Filter/FlateDecode /N 4/Length 2595>>stream 

Если я изменяю /N 4на /N 3, сообщение «значение ключа N» исчезает. /Nпо-видимому, представляет количество объектов в потоке, который следует за этим заголовком. Я не знаю, как читать закодированный поток, поэтому я не понимаю, что он содержит, и почему pdf-tools считает, что он должен содержать только 3 объекта.

PDF / A, напечатанный с использованием Bullzip, который также использует Ghostscript, также не проходит проверку с сообщением «ключ N равен 4, но должен быть 3».

Это как-то связано с цветовым пространством? Я вне моей глубины там. Я думаю, что я был бы счастлив с "простым" пространством sRGB. Документы Ghostscipt говорят, что кодировка PDF / A должна быть CMYK . Adobe подразумевает, что RGB или CMYK работают для PDF / A. Так что мне неясно, как найти подходящий профиль .icc.

А может, валидатор не прав и все нормально?

6

2 ответа на вопрос

7
Mark Berry

С помощью разработчика GhostScript в этом отчете об ошибках я смог решить эту /Nпроблему. Уроки выучены:

  • Документ GhostScript, на который есть ссылка в моем вопросе, устарел. Нынешний документ, здесь, говорит, что ProcessColorModel = DeviceRGB хорошо.
  • Профили ICC описывают цветовое пространство. Некоторые допустимые цветовые пространства: СЕРЫЙ, RGB и CMYK. Вы можете проверить цветовое пространство профиля ICC, используя бесплатный ICC Profile Inspector .
  • В разделе PDF-файла, вызывающего ошибки проверки, /Nпредставлено количество красителей.
  • Файл PDFA_def.ps выдает /Nзначение. Образец, включенный в Ghostscript 9.07, только излучает /N 1(для ProcessColorModel = DeviceGray) или /N 4(для любого другого ProcessColorModel).
  • Мой первоначальный тест указал ProcessColorModel = DeviceCMYK, который вызвал /N 4, но использовал профиль ICC, описывающий цветовое пространство RGB. Валидаторы правильно уловили это несоответствие: я обещал 4 цвета, но описал только 3.

Большинство профилей ICC, которые я нашел для дисплеев и офисных принтеров, описывают цветовое пространство RGB. (CMYK более специфичен для высокопроизводительных печатных машин и некоторых видов бумаги.) Для моих целей предпочтительнее использовать RGB. Следующий пакетный файл преобразует PDF-файл в PDF / A-1b с цветовым пространством RGB:

gswin32c ^ -dPDFA ^ -dNOOUTERSAVE ^ -sProcessColorModel=DeviceRGB ^ -dUseCIEColor ^ -sDEVICE=pdfwrite ^ -o %2 ^ -dPDFACompatibilityPolicy=1 ^ "C:\Program Files (x86)\gs\gs9.07\mylib\PDFA_def.ps" ^ %1 

В PDFA_def.ps укажите профиль ICC, который описывает цветовое пространство RGB, и измените раздел для определения профиля ICC следующим образом:

% Define an ICC profile :  [/_objdef /type /stream /OBJ pdfmark [ <</N systemdict /ProcessColorModel get /DeviceGray eq ifelse} ifelse >> /PUT pdfmark [ ICCProfile (r) file /PUT pdfmark 

Длинная строка содержит вложенный ifelseоператор, который обнаружит ProcessColorModel = DeviceRGB и выдаст соответствующий /N 3. Полученный файл должен пройти проверку на pdf-tools.com .

Обновление: Я создал несколько более способный пакетную программу и опубликовал в своем блоге: Пакетное Преобразование PDF в PDF / A .

Я только что использовал pdf-tools, и единственной ошибкой проверки, которую я получил, было «Значение ключа N равно 4, но должно быть 3.». Вы не представляете, как я рад прочитать ваш подробный ответ здесь. Бесконечно благодарен. Jan-Philip Gehrcke 9 лет назад 0
3
harrymc

Я бы предложил сначала повторно протестировать вашу проблему на последней версии 9.07 ghostscript, на тот случай, если эта проблема уже была устранена.

Если это не поможет, потребуется настоящий гуру PDF, чтобы ответить на эту проблему. Я подозреваю, что проблема как-то связана с конфликтом между содержимым файла .ps и параметрами команды gswin32c.

Однако, поскольку проблемный файл создается ghostscript, вы имеете право разместить свой вопрос на странице Bugzilla ghostscript (требуется регистрация), где разработчики ответят на ваш вопрос. Если это ошибка в ghostscript, скорее всего, она будет исправлена ​​в следующей версии.

В дополнение к описанию проблемы, как в вашем посте, вы должны приложить пример входного файла .ps и полученный файл .pdf. Постарайтесь минимизировать их размеры.

В прошлом я сообщал о нескольких подозрительных ошибках ghostscript на этом форуме, и на них всегда давали хорошие ответы, и все обнаруженные мной реальные ошибки были исправлены.

Спасибо за ответ. Возможно, я запутался, упомянув, что оригинал был создан CutePDF 2.8, который использует GhostScript 8.15. Однако фактическое преобразование, которое я пытаюсь отладить, было выполнено с помощью GhostScript 9.07. Я немного удивлен, что PDF / A преобразование еще не решено и не проверено, но я не нашел подробного руководства. Я могу попробовать форум ghostscript. Mark Berry 11 лет назад 0
Просто помните, что это не ориентированный на пользователя форум, а веб-сайт с сообщениями об ошибках, на который отвечают только разработчики. harrymc 11 лет назад 0
Перед отправкой ошибки я решил загрузить пробную версию Adobe Acrobat XI. Там мои тестовые документы проходят «предполетную» проверку PDF / A-1b. Ghostscript (и другие) склонны склоняться к интерпретации Adobe стандарта? Если это так, то, вероятно, нет смысла считать это ошибкой. Mark Berry 11 лет назад 0
Согласно тому, что вы говорите, продукты, основанные на Ghostscript, считают это / N несоответствующим. Acrobat не может обнаружить его, это может быть просто ошибкой в ​​программе проверки Acrobat. В моем собственном чтении спецификаций PDF я не нашел / N в списке допустимых параметров для FlateDecode, поэтому я понятия не имею, почему он вообще генерируется (вы можете попробовать удалить его и посмотреть, работает ли pdf по-прежнему). ). Вам не нужно беспокоиться о том, чтобы представить разработчикам Ghostscript ложную ошибку - я уже делал это не раз и всегда относился к нам вежливо. harrymc 11 лет назад 0
Я создал http://bugs.ghostscript.com/show_bug.cgi?id=693830. Насколько я могу судить, / N не является параметром FlateDecode; скорее, «FlateDecode», «N» и «Length» все описывают, как следует интерпретировать следующий «поток». Инструмент Acrobat «Внутренняя структура PDF» показывает, что этот объект находится в OutputIntents> 0> DestOutputProfile и что этот поток является потоком профиля ICC, но я до сих пор не понимаю, что означает / N. Mark Berry 11 лет назад 0
Я искал ссылку на PDF для всех вхождений "N", и нет ни одного, который, кажется, относится к вашему делу. Так что осталось дождаться официального ответа Ghostscript. Пожалуйста, отправьте это здесь. harrymc 11 лет назад 0
Я вижу несколько примеров "/ N 3" и "/ N 4" в [PDF 1.7 ссылка] (http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/ PDF / PDFs / PDF32000_2008.pdf). По-видимому, это относится к числу объектов в потоке. Несколько примеров относятся к цветовым профилям ICC. Поскольку CMYK будет включать 4 цвета, а RGB - только 3, мое подозрение вызывает некоторую путаницу между ними. Mark Berry 11 лет назад 0
/ N был действительно упомянут только для цветовых профилей. Вы пытались удалить / N полностью из вашего PDF, чтобы увидеть, действительно ли это полезно? harrymc 11 лет назад 0
Если я удаляю / N, PDF открывается в Adobe Reader, но просто отображает пустую страницу. Mark Berry 11 лет назад 0
Так что это необходимо, вероятно, потому что поток описывает встроенное изображение. Я видел, что в ошибке, которую вы открыли, разработчик Ghostscript ответил, что / N = 4 означает цветовой профиль CMYK, а / N = 3 определяет RGB, и это соответствует спецификациям. Скорее всего, он прав, говоря, что не принимать это - ошибка. Я не впервые обнаруживаю, что команда Ghostscript знает спецификации лучше, чем другие разработчики. harrymc 11 лет назад 0
... В этом случае преобразование ваших изображений из CMYK в RGB может решить проблему. harrymc 11 лет назад 0
Мой самый простой тестовый файл не содержит изображений, но методом проб и ошибок я узнал, что цветовое пространство ICC должно по-прежнему соответствовать значению `/ N`. Образец PDFA_def.ps, включенный в GS 9.07, неправильно обрабатывает DeviceRGB, то есть никогда не выдает `/ N 3`. Я отправил ответ с предложенным улучшением PDFA_def.ps. Mark Berry 11 лет назад 0
Гарри, я ценю, что ты был партнером по обсуждению этого вопроса и указал мне на сайт с ошибками Ghostscript. Я пометил ваш ответ как полезный и создал свой собственный ответ с техническими особенностями, которые я в итоге разработал. Я немного смущен системой вознаграждений. Я собирался спросить, что вы считаете справедливым в этой ситуации, но после прочтения FAQ кажется, что вы можете автоматически получить половину очков (что хорошо), а я потеряю вторую половину? Кажется, что FAQ не охватывает ситуацию, когда щедрость получила ответ, который был полезен, но принятый ответ был задан. Mark Berry 11 лет назад 0
Правило половинной репутации применяется только тогда, когда нет решения, поэтому вы потеряли бы всю награду. harrymc 11 лет назад 0
позвольте нам [продолжить это обсуждение в чате] (http://chat.stackexchange.com/rooms/8216/discussion-between-mark-berry-and-harrymc) Mark Berry 11 лет назад 0

Похожие вопросы