Как восстановить PDF-файл и вставить недостающие шрифты

Я использую pdftk исправить некоторые сбои в поврежденных файлах PDF, но я столкнулся с другой проблемой, которая не устранена pdftk (или, по крайней мере, я не знаю, как это сделать).

У меня есть PDF-файлы с текстом на основе TrueType шрифты, но они не были встроены во время создания PDF. Теперь я хочу встроить необходимые шрифты в существующие файлы.

Есть ли инструмент командной строки (например, pdftk) вставлять недостающие шрифты, указав путь к TTF файлы?

3 ответа

Вы можете использовать Ghostscript для встраивания отсутствующих шрифтов. Запустите команду так:

gs                                             \
  -o file-with-embedded-fonts.pdf              \
  -sDEVICE=pdfwrite                            \
  -dEmbedAllFonts=true                         \
  -sFONTPATH="/path/to/ttf;/other/path/to/ttf" \
   input-without-embedded-fonts.pdf

Смотрите также этот ответ:

У меня была такая же проблема (в Ubuntu 14.04), и я нашел следующее решение:

  • установить Acrobat Reader
  • выведите "print to file" в файл postscript ("foo.ps") и "advanced -> print as image"
  • затем на консоли использовать ps2pdf foo.ps foo.pdf и в результате получается файл со встроенными шрифтами и оригинальным контентом

Промежуточный файл postscript намного больше (650 КБ), чем входной файл (56 КБ), но полученный PDF снова имеет умеренный размер (82 КБ).

Я не знаю, почему это работает, т.е.

  • почему "печать как изображение в файл", кажется, создает изображение, но также сохраняет информацию о шрифте,
  • почему ps2pdf восстанавливает эту информацию о шрифте, и
  • почему в результирующем PDF-файле вообще есть шрифты, потому что это должно быть только изображение, верно?

Но в результате получается PDF со всеми встроенными шрифтами и размером, аналогичным исходному файлу.

Как упомянул @t-bltg в комментарии, Ghostscript теперь поставляется сps2pdfкоманда, которая автоматически вставит отсутствующие шрифты.

      ps2pdf -sFONTPATH="." in.pdf out.pdf

Это должно быть все, что вам нужно.

Поиск неисправностей

  • Приведенная выше команда предполагает, что необходимый файл .ttf или .otf находится в текущем рабочем каталоге ("."). Если это не так, вы можете изменить.в каталог, где находится файл шрифта. Например:

            ps2pdf -sFONTPATH="~/.local/share/fonts/" input.pdf output.pdf
    

    (Обратите внимание, вы должны указать каталог, а не файл шрифта.)

  • Убедитесь, что имя шрифта, которое ищет PDF, совпадает с именем, встроенным в файл шрифта. Например, если файлу PDF требуется шрифт с именем «Fantasy Bold», но файл шрифта определяет шрифт с именем «Fantasy» или «Fantasy Bold Neue LT Pro», этот метод не будет работать.

Бонус: 14 семейств типов

Даже без указания FONTPATH ​​Ghostscript знает о 14 стандартных шрифтах Postscript Level 2, включая их старые имена. Например, современные системы иногда неправильно отображают «New Century Schlbk», потому что ожидают «New Century Schoolbook». Простоps2pdf in.pdf out.pdfрешает проблему.

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