Как я могу изменить определенный цвет RGB на определенный цвет CMYK в файле PDF? - PullRequest
2 голосов
/ 07 января 2010

Если у меня есть файл PDF с объектами (текст, штриховые рисунки) определенного цвета RGB, и я хочу преобразовать эти объекты в определенный цвет CMYK, какие библиотеки доступны, что позволит мне это сделать? 1001 *

Обратите внимание, что мне не нужна возможность "сопоставлять" произвольные значения RGB с "подходящим" значением CMYK - эти значения предварительно определены.

.NET / C # предпочтительнее, но я бы рассмотрел почти все.

Очевидно, что я предпочел бы бесплатные / открытые библиотеки платным, но в зависимости от модели лицензирования я бы также рассмотрел платные.

1 Ответ

4 голосов
/ 07 января 2010

Честно? Это невероятно нетривиально.

Рендеринг PDF осуществляется через программы, которые описывают то, что будет отображаться в последовательности. Существует графическое состояние, которое накапливает изменения, внесенные программой, а также помечает страницу.

Существует множество способов установки цветов. Надеемся, что в ваших PDF-документах используются только операторы RG и rg, которые задают цвета RGB для операций штриховки и без штриховки. Это означает, что цветовые операции будут иметь вид:

rf gf bf RG

где rf, gf и bf - числа с плавающей запятой, представляющие интенсивности цветовых каналов от 0,0 до 1,0.

Было бы вопросом переписывания всех операторов RG и rg для использования K и k соответственно, что будет использовать 4-канальный CMYK.

Это само по себе является сложной задачей, так как вам нужно будет прочитать нужный документ / страницу, проанализировать поток содержимого и переписать новый, который заменит старый (опять же, возможно, но не тривиально - PDF позволяет заменять отдельные объекты, такие как поток контента, добавляя новое поколение в файл). Не думай об использовании САС. PDF зависит от формата файла, и изменение чего-либо встроенного без сохранения той же длины приведет к разрыву PDF.

Настоящая проблема произойдет, если файл использует операторы CS и cs. Рассмотрим эту последовательность операций:

/DeviceRGB CS 1 0 0 SC 0 0 m 200 200 l S 200 200 m 200 0 l 0 1 0 SC S

Это означает, что для цветового пространства установлено значение DeviceRGB, для красного цвета выбрано, для (0, 0), для линии (200, 200), для обводки (для красного), для для (200, 200), для (200, 0), установите цвет на зеленый и обведите.

Это не так просто - если вы хотите изменить красный цвет RGB на желтый CMYK, вы можете сделать это:

/DeviceCMYK CS 0 0 1 0 SC 0 0 m 200 200 l S 200 200 m 200 0 l 0 1 0 SC S

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

Что вам нужно сделать, это интерпретировать поток контента, отслеживая, каково текущее цветовое пространство, и когда приходит команда CS, имеющая цвет, который вы хотите изменить, вам нужно заменить его на / DeviceCMYK CS cmyk SC и затем следующая команда rgb SC должна измениться на / DeviceRGB CS rgb SC.

Здесь не учитывается, как обрабатывать цветовые пространства на основе ICC, оттенки серого, LAB, n-channel, colormapped, шаблоны, формы и т. Д.

PDF не был создан для редактирования.

Если бы мне было поручено сделать это, я бы сделал следующее:

  1. Если бы это было менее 10 файлов, я бы открыл их в Illustrator, изменил цвета и экспортировал в PDF
  2. Если бы это было для 10 или больше и меньше 1000, я бы нанял временного работника, чтобы сделать то, что я сделал в шаге 1.
  3. Если бы это было 1000 или больше и меньше 10000, я бы написал программу для сценария Illustrator, чтобы внести эти изменения, если это возможно.
  4. Если бы это было 10000 или более и продолжалось, я бы серьезно поговорил с руководством о создании документов, потому что, если такие изменения необходимо внести в формат файла терминала, и они не могут быть восстановлены правильно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...