PDF: как оптимизировать размер файла и конвертировать в PNG (проблема встроенных шрифтов) - PullRequest
2 голосов
/ 23 сентября 2010

У меня есть PDF со встроенными шрифтами, с которыми я не могу работать. Сейчас я использую GhostScript и пытаюсь сделать 2 вещи:

  • Свернуть размер файла PDF:

    gswin32c -dSAFER -dBATCH -dNOPAUSE -dQUIET -sDEVICE = pdfwrite -sOutputFile = output.pdf input.pdf

  • Преобразование PDF в PNG (супер образец, который будет использоваться для создания других миниатюр):

    gswin32c -dSAFER -dBATCH -dNOPAUSE -dQUIET -dFirstPage = 1 -dLastPage = 1 -r288 -sDEVICE = png16m -sOutputFile = output.pdf input.pdf

Вышеуказанное хорошо работает при работе с отсканированными документами. Но когда я запускаю их для PDF-файлов со встроенными шрифтами (PDF-файл создается приложением на лету), происходит сбой. Вот ошибка, которую я получаю:

GPL Ghostscript 8.71: Warning: 'loca' length 274 is greater than numGlyphs 136 i
n the font UUGHDE+ArialMT.
GPL Ghostscript 8.71: Warning: 'loca' length 274 is greater than numGlyphs 136 i
n the font UUGHDE+ArialMT.
GPL Ghostscript 8.71: Warning: 'loca' length 188 is greater than numGlyphs 93 in
 the font UUGHDE+Arial-BoldMT.
GPL Ghostscript 8.71: Warning: 'loca' length 188 is greater than numGlyphs 93 in
 the font UUGHDE+Arial-BoldMT.

Помимо GhostScript, у меня также есть доступ к PDFTK и ImageMagick (которые могут быть заменены на GraphicsMagick). Я также открыт для других решений.

Разработка ведется на WAMP. Развертывание для ЛАМПЫ.

Предложения

1 Ответ

3 голосов
/ 23 сентября 2010

Шрифты, используемые в ваших PDF-файлах, кажутся шрифтами OpenType. Программное обеспечение, которое создало эти PDF-файлы, похоже, подмножество шрифтов. Во время встраивания и подстановки шрифтов этим программным обеспечением (которое «генерирует PDF-файлы на лету» - было ли это также Ghostscript?!?), Возникла проблема, которая заставила его не соответствовать 100% спецификации.

Таблицы 'loca' являются частью описания шрифтов OpenType. Они представляют индекс для всех местоположений глифа.

Теперь вы обрабатываете эти не совсем «кошерные» PDF-файлы с помощью Ghostscript. Ghostscript выдает предупреждения, но без ошибок.

Ошибки GS обычно означают: "Я прерву дальнейшую обработку. Я не могу обойти проблему или исправить этот поврежденный файл. Если я уже записал выходные файлы, они будут бесполезны."

GS предупреждения обычно означают: "Я столкнулся с проблемой. Но я продолжу обрабатывать ввод и обходить его. Я написал правильный выходной файл. Но вам лучше проверить его, особенно его верность! "

Предупреждения ( не ошибки!), Которые вы видите, означают следующее:

  1. Один из указанных поднабора шрифтов утверждает, что количество символов составляет 188 в соответствии с таблицей.
  2. Но на самом деле фактическое описание шрифта содержит только определения для 93 глифов.
...