Автоматизация преобразования PDF в PDF/A-2b с помощью Ghostscript. Как преодолеть ошибку цветового профилирования icc?

Я пытаюсь понять, как конвертировать PDF-файлы в формат pdfa2b для архивирования. Пакетный процесс обрабатывает одновременно только 600–800 файлов, а у нас их более полумиллиона. Если мы будем делать это один за другим, это займет целую вечность (вероятно, 20 месяцев такими темпами). Любая помощь приветствуется. Есть ли в Adobe способ добиться автоматизации или кто-нибудь сможет помочь мне указать правильное направление в отношении сценариев с открытым исходным кодом?

Примечание. Помимо инструментов Adobe, я также пробовал использовать Ghostscript. Я упираюсь в стену в вопросе добавления правильных цветовых профилей.

ОШИБКА ПРОВЕРКИ PDF БЕЗ ДОБАВЛЕНИЯ ПРОФИЛЯ ICC:

Device process color used but no PDF/A OutputIntent
                Has Output Intent
                Base color space name
                Outside visible page area

Параметры Ghostscript в Python:

gs_command = [
    r"C:\Program Files\gs\gs9.55.0\bin\gswin64c.exe",  # Full path to the Ghostscript executable
    "-dPDFA=2",
    "-dBATCH",
    "-dNOPAUSE",
    "-sDEVICE=pdfwrite",
    f"-sColorConversionStrategy = {color_conversion_strategy}",
    f"-sProcessColorModel = {process_color_model}",
    f"-sOutputICCProfile = {icc_profile_path}",  # Path to the ICC profile
    "-sPDFACompatibilityPolicy=1",
    f"-sOutputFile = {output_pdf}",
    input_pdf
]

Ошибка:

Ошибка: /undefined в --runpdf-- Стек операндов: --nostringval-- 1
0 --nostringval-- ( **** Ошибка: интерпретатор PDF обнаружил ошибка при обработке файла.\n) Стек выполнения: %interp_exit
.runexec2 --nostringval-- runpdf --nostringval-- 2
%stopped_push --nostringval-- runpdf runpdf false 1
%stopped_push 1949 1 3 %oparray_pop 1948 1 3
%oparray_pop 1933 1 3 %oparray_pop 1934 1 3
%oparray_pop runpdf Стек словарей: --dict:753/1123(ro)(G)--
--dict:0/20(G)-- --dict:86/200(L)-- --dict:2/10(L)-- Текущий режим распределения — локальный. Последняя ошибка ОС: Разрешение отклоненоОшибка: Команда '['D:\Projects\PDFProcessing\packages\gs10.03.1\bin\gswin64c.exe', '-dPDFA=2', '-dBATCH', '-dNOPAUSE', '-sProcessColorModel=DeviceCMYK', '-sDEVICE=pdfwrite', '-sColorConversionStrategy=CMYK', '-sProcessColorModel=DeviceCMYK', '-sOutputICCProfile=../packages/Adobe ICC Profiles (конечный пользователь)/Generic Серая гамма 2.2 Profile.icc', '-sPDFACompatibilityPolicy=1', '-sOutputFile=../resources/output_pdfa2b.pdf', '../resources/test.pdf']' вернул ненулевой статус выхода 1. GPL Ghostscript 10.03.1: Неустранимая ошибка, код выхода 1 Вывод команды: Никто

в версиях это просто смесь того, что я пробовал между ними. Я использую 10.03. Ну, это задача для некоммерческой библиотеки. Я делаю это как побочный проект, чтобы выяснить, смогу ли я помочь им сделать это быстрее. Я только сегодня начал изучать скрипты-призраки, поэтому буду рад любой помощи. у меня есть тестовый файл здесь — github.com/sachins301/PDFProcessing/blob/main/resources/…

ss301 04.06.2024 03:39

Спасибо! Я попробую протестировать, используя их сценарий проверки. Возвращение в библиотеку в среду. Ранее я получил файл A2, но в нем была ошибка проверки, о которой я упоминал в сообщении. но это было без использования этой стратегии преобразования цветов.

ss301 04.06.2024 03:56

Вы не использовали файл «pdfa_def.ps», это небольшая программа PostScript, которая, помимо прочего, устанавливает примечание OutputIntent, а НЕ OutputICCProfile, который вы не хотите устанавливать и, вероятно, является причиной вашей ошибки. Я бы рекомендовал запускать Ghostscript из командной строки, пока вы не сделаете все правильно, а затем переместить его в Python. Существует пример файла pdfa_def.ps (который вы ДОЛЖНЫ отредактировать), включенного в Ghostpdl/lib. Вам также необходимо предоставить разрешение на чтение профиля ICC, который вы включаете в pdfa_def.ps, добавив --permit-file-read= <имя профиля icc> в командную строку.

KenS 04.06.2024 08:59

Документацию по созданию файла PDF/A можно найти здесь Ghostscript.readthedocs.io/en/latest/…

KenS 04.06.2024 10:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
97
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

PDF/A имеет множество разновидностей, но простейшими требованиями являются удаление несовместимых объектов и добавление отсутствующих шрифтов, а «намерение» цвета — более драконовское требование, которого следует избегать, если это возможно.

Таким образом, самая простая команда GhostScript — просто запуститься с отметками PDF/A-2b, и GhostScript может легко сделать это с помощью нескольких инструкций.

При использовании файла package.CMD для перетаскивания или подачи имени файла это будет минимум.

set "GSC=%ProgramFiles%\gs\gs10.03.1\bin\gswin32c.exe"
set "in=%~dpn1.pdf"
set "out=%~dpn1-pdfA-2b.pdf"
"%GSC%" -sDEVICE=pdfwrite  -dPDFA=2 -dPDFACompatibilityPolicy=1  -sColorConversionStrategy=UseDeviceIndependentColor   -o"%out%" -f "%in%"

Используя данный тестовый файл, мы можем убедиться, что он в порядке.

Это становится намного сложнее, если вам нужно добавить цвета, но в основном следуйте документам GhostScript, чтобы отредактировать свой собственный цветовой профиль. PS и включите переключатель.

Так что будьте осторожны после редактирования любого желаемого профиля - переключатели включаются в пользовательский профиль.ps. --permit-file-read=<icc profile name> и или --permit-file-read = "profile.PS" это позволит избежать упоминания Permission denied

**** Ошибка: произошла ошибка рисования страницы. Не удалось нарисовать эту страницу вообще, страница будет отсутствовать в выводе. GPL Ghostscript 10.01.2: Неустранимая ошибка, код выхода 255 GPL Ghostscript 10.01.2: Объект страницы был зарезервирован для назначения аннотации, но такая страница не была нарисована, аннотация в выводе будет недействительной. GPL Ghostscript 10.01.2: ОШИБКА: ioerror (-12) при закрытии устройства pdfwrite. Знаете ли вы об этой ошибке? я преобразовал его однажды раньше, но теперь выдает эту ошибку.

ss301 20.06.2024 21:23

Ой, у меня хранилище заполнено. В Windows: Системы > Хранилище > Временные файлы (или другие файлы).

ss301 20.06.2024 21:29

Другие вопросы по теме