Растеризация PDF с шрифтом, не встроенным с помощью GhostScript - PullRequest
3 голосов
/ 11 июля 2011

Мне нужно создать JPEG из PDF. JPEG должен быть создан на основе Trim Box, а PDF может быть версии 1.3 с дополнительными цветами Pantone, для которых абсолютно необходим предварительный просмотр Overprint, поэтому только GhostScript (и Rip, конечно, может их обрабатывать). Как Photoshop, Image Magick, так и SIPS (система обработки изображений с помощью сценариев OS X) не могут решить обе проблемы (обрезка до обрезки и сложная обработка надпечатки).

Я создал приложение для растрирования полученного PDF-файла, и все работает хорошо, за исключением того, что в некоторых китайских PDF-файлах не установлен один шрифт. Этот шрифт является китайским STXiHei TrueType (CID) с кодировкой G8pc-EUC-H (информация извлечена из Acrobat Pro).

Теперь, когда GhostScript обрабатывает эти PDF, происходит ошибка. Мой вопрос:

  1. Поскольку не встроенный шрифт находится за пределами области TrimBox, существует параметр GS, позволяющий пропускать не внедренный шрифт?
  2. Если пункт 1 невозможен, как можно заменить отсутствующий шрифт?
  3. Моя установка GS 9.02 на OS X не устанавливает ни файл cidfmap, ни папки со шрифтами.
  4. Что мне нужно установить и где использовать замещающие шрифты?
  5. Я много раз читал use.htm и провел несколько дней безуспешного тестирования, пытаясь игнорировать или заменять не внедренный шрифт другим. Аргумент кажется сложным, но, вероятно, решение простое.

Кто-нибудь может мне помочь?

1 Ответ

5 голосов
/ 13 июля 2011

На этот вопрос (в конце концов) ответили с самого начала, на UseNet в comp.text.pdf.Проблема в том, что файл PDF содержит ссылку на CIDFont (не шрифт, а CIDFont).В отличие от поставленной выше задачи, шрифт не встроен, и в этом трудность.

CIDFonts довольно сложнее, чем шрифты, и непросто заменить отсутствующие шрифты втак же, как отсутствующие латинские обычные шрифты заменяются (например) Courier.

Невозможно пропустить шрифт, потому что Ghostscript не может сразу узнать, где будет отображаться текст (т.е. шрифтзагружается до того, как мы узнаем, где будет отрисовываться текст).

Теперь Ghostscript позволяет вам указывать дополнительные шрифты;в случае CIDFonts они описаны в файле с именем cidfmap, который находится в gs / Resource / Init в дистрибутиве Ghostscript.

Проблема 1 заключается в том, что по умолчанию ресурсы GS встроены в исполняемый файл и используютсяфайл, расположенный в файловой системе ROM.Таким образом, мы должны указать GS смотреть на диск вместо этого.Есть два способа сделать это:

1) Скопируйте все ресурсы из исходного дистрибутива (все в / gs / Resource) в удобное место и используйте ключ -sGenericResourceDir =, чтобы указать GS использовать этот каталог.,Если вы сделаете это, то должны быть осторожны, чтобы добавить конечный разделитель каталогов в конец пути.Я упоминаю об этом, потому что обычно с GS вы не делаете это.В этом случае PLRM говорит, что мы должны.

2) Скопируйте файл cidfmap в удобное для вас место и скажите GS, чтобы он просматривал этот каталог, используя ключ -I, который добавляет каталог в начало списка поиска.Это важно, потому что вы можете иметь только один файл cidfmap, а GS использует первый найденный файл.

Итак, о самих файлах шрифтов.Вы можете использовать подлинный CIDFont или шрифт TrueType вместо CIDFont.

Если вы используете подлинный CIDFont, то вы должны либо использовать опцию 1 выше (GenericResourceDir) и поместить файл в каталог с именем Resource / CIDFonts в расположении GenericResourceDir, либо вы используете опцию 2 и поместите CIDFont вдиректория с именем CIDFonts непосредственно под местоположением, на которое указывает -I.

Если вы используете шрифт TrueType в качестве замены, вы можете использовать ключ / Path в записи для шрифта в cidfmap, чтобы указать на шрифт TrueType.

Сложности преобразования шрифта TrueType неизвестного происхождения в определенный тип CIDFont означают, что вам необходимо предоставить много информации в записи cidfmap, это задокументировано в самом файле.На что следует обратить внимание:

1) / Path должен указывать на файл шрифта, он должен присутствовать и иметь разрешения, позволяющие его читать.

2) Вы должны указать /SubfontID для коллекции TrueType.Если вы хотите использовать что-либо, кроме первого субфонта, тогда вы должны указать SubfontID.

3) Записи в cidfmap интерпретируются интерпретатором PostScript и поэтому должны соответствовать синтаксису PostScript.В частности, имя шрифта является объектом имени PostScript и поэтому должно быть введено с помощью '/'.

Наконец;ряд дистрибутивов Linux не поставляют полный исходный код для Ghostscript, вам может потребоваться подобрать его, прежде чем использовать какой-либо из приведенных выше советов.Вы можете получить релизы здесь:

http://www.ghostscript.com/

...