Вопрос или проблема
Я использую версию GPL Ghostscript 9.27
. Я успешно сжал несколько PDF-файлов (в Linux) с помощью команды gs
, как я думал.
Но после проверки некоторых конкретных PDF-файлов я заметил изменения цвета на некоторых страницах, как минимум в двух PDF; например, в некоторых файлах есть страницы с словами из целых абзацев, измененными на красный цвет (причем большинство страниц осталось как оригинал, где текст черными символами). Я не знал, были ли затронутые тексты векторами или растровыми (из сканирования) с векторным наложением.
Более того, другой PDF, который содержит изображения черно-белого (серого) масштаба, теперь после сжатия имеет текст (возможно, как векторы) того же цвета (черный), но все изображения стали красными и черными. Так что здесь проблема, похоже, иная, я думаю, потому что затрагивает только все растровые изображения. Возможно, в файле, где есть проблема с растром, нет проблемы с вектором/текстом.
Ниже вверху — часть файла с затронутыми изображениями, после (слева) и до (справа) сжатия; внизу слева у нас есть другой файл после сжатия с текстом (как вектор) в красном цвете, а внизу справа другая страница с текстом (как вектор) в обычном черном цвете, как в оригинале.
.
Команда, которую я использовал, оставила версию выходного PDF как оригинал (что указано в -dCompatibilityLevel
). Она выглядит так:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=original_version -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dSAFER -dBATCH -sOutputFile=file_out file_in
Программа не показывает, что есть какая-либо ошибка. Я пытался удалить опцию -dQUIET
или -dSAFER
, но ничего не изменилось. Чтобы быть точным, опция -dSAFER
должна была предотвратить изменение целостности PDF шрифтом gs.
Итак, как избежать этих неожиданных изменений с Ghostscript? В чем причина этой проблемы?
Я обнаружил, пробуя команду pdfimages -list <pdf_file>
с PDF, у которого есть проблема с изображениями, что все они имеют цветовое пространство изображения типа “Separation” (столбец color
= sep
). Но та же команда, использованная с различными другими PDF, которые имеют только проблему с текстом (или без проблем), имеет цветовое пространство изображения другое (например, rgb, cmyk, gray и т.д.). Я не знаю много, но подозреваю, что это различие имеет последствия, связанные с теми проблемами gs
.
Спасибо Йорику за запрос разъяснений и уточнений.
Проблема, вероятно, вызвана ошибкой в версии 9.27, так что если вы можете, обновите Ghostscript и переходите сюда к P.S.. В противном случае, если вы используете эту версию, продолжайте читать.
Я наконец нашел одно решение всех проблем. Я искал информацию о цветах в онлайн-руководстве Ghostscript по выходу PDF и нашел переключатель ColorConversionStrategy
, который меняет цветовое пространство (как яbelieve). Варианты: LeaveColorUnchanged
, Gray
, RGB
, CMYK
или UseDeviceIndependentColor
. Затем я попробовал с PDF, у которого изображения были изменены, команду:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=original_version -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dSAFER -dBATCH -sColorConversionStrategy=LeaveColorUnchanged -sOutputFile=file_out file_in
и выход теперь имеет правильные оригинальные цвета. Другие варианты сделали это (оригинальные изображения были в сером масштабе): Gray
изображения остались как оригинал, RGB
изображения изменились на красные и черные, CMYK
изображения изменились на белые и циановые, UseDeviceIndependentColor
остались теми же (но в руководстве сказано, что это менее совместимо с ps).
Я повторил ту же команду со всеми PDF, затронутыми изменением цвета векторного текста. Это также всегда исправляло проблему. Я повторно попробовал опцию RGB
и это вызвало проблему.
Поэтому лучшая опция среди всех в этих случаях, я думаю, это -sColorConversionStrategy=LeaveColorUnchanged
.
Я думаю, что будет хорошо включить эту опцию как норму, на случай, если вы будете использовать настройки /screen или /ebook (по крайней мере в версии 9.27; читайте P.S. ниже).
Дело в том, что программа с настройкой /ebook
автоматически устанавливает ColorConversionStrategy
на RGB
, что в моем случае вызывает проблему. Поэтому этот переключатель генерирует меньше (или никаких) проблем с LeaveColorUnchanged
вместо этого.
О причине я не знаю конкретно, но первой подозреваемой является проблема в сжатии изображений с цветовым пространством Separation.
Я заметил, проверяя pdfimages -list
, что цветовое пространство “Separation” в входном PDF остается в выходном (но /ebook
должно было бы изменить это).
P.S.: Вероятно, согласно этому ответу (по аналогичной проблеме), я только что обнаружил, в Ghostscript версии 9.27 есть ошибка.
Мой обходной путь работает для меня, но проблема не должна была возникать. Возможно, версия 9.50 работает хорошо. Текущая версия 9.56.1, но я использую систему на базе Debian, так что она не сильно обновлена.
Примечание редактирования: Извините, я не эксперт, поэтому я думал, чтоSelectable text could only be a vector, but it can be also a raster that is overlayed by vectors through OCR, и я думаю, что это был случай (как я полагаю, цветовые пространства касаются только растра). Поэтому я немного отредактировал свои предложения.
Ответ или решение
Проблема, описанная вами, связана с изменением цветов текста и изображений в некоторых PDF-файлах после их обработки с помощью Ghostscript версии 9.27. Данное поведение может иметь несколько причин, и важно рассмотреть их в деталях.
Причины изменения цвета
-
Ошибки в версии Ghostscript: Версия 9.27 известна некоторыми проблемами, связанными с управлением цветом. Если возможно, рекомендуется обновить Ghostscript до более поздней версии, чтобы избежать этих ошибок. Более свежие версии могут содержать исправления, которые устраняют подобные проблемы.
-
Настройки управления цветом: Ваша команда, использующая опции управления цветом, включает установку
-dPDFSETTINGS=/ebook
, при которой по умолчанию выбирается стратегияColorConversionStrategy=RGB
. Это означает, что при обработке PDF-файлов Ghostscript может преобразовывать цветовые пространственные модельные данные, включая оттенки текста и графики. Если изначально цвета изображений или текста были в пространстве "Separation", это может привести к несоответствиям. -
Разные цветовые пространства: Как вы отметили, PDF-файлы с изображениями имеют пространство цвета "Separation". Этот тип пространства используется для специальных цветовых моделей, например, в печати. Ghostscript при обработке таких PDF может неправильно трактовать цвета и заменять их на красный из-за некорректного преобразования цветов.
Решения проблемы
Для решения этой проблемы вы уже нашли рабочий вариант — параметр -sColorConversionStrategy=LeaveColorUnchanged
. Этот параметр сохраняет оригинальные цвета при обработке, что позволяет избежать изменений, вызываемых автоматическим преобразованием.
Пример команды:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=original_version -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dSAFER -dBATCH -sColorConversionStrategy=LeaveColorUnchanged -sOutputFile=file_out file_in
Использование этого параметра позволяет сохранить цвета оригинальных текстов в черном и изображений в градациях серого.
Рекомендации
-
Проверка версии Ghostscript: Убедитесь, что вы используете актуальную версию Ghostscript. Проверка изменений в новых версиях может оказать положительное влияние на вашу работу.
-
Тестирование различных настроек: Проводите тесты с различными настройками color conversion в зависимости от ваших конкретных требований. Некоторые файлы могут требовать специфических настроек для адекватного отображения.
-
Документация и ресурсы: Ознакомьтесь с официальной документацией Ghostscript по управлению цветом, чтобы лучше понять, как работает система. Это знание может быть полезно при выборе оптимальных параметров для ваших PDF-файлов.
Заключение
Несомненно, проблема, с которой вы столкнулись, может быть решена путем корректной настройки параметров команды Ghostscript и поддержания актуальности программного обеспечения. С учетом ваших выводов о различиях в цветовых пространствах и их воздействии на результат, предлагаемые решения позволят избежать изменения цветов и сохранить целостность ваших PDF-документов.