Как восстановить 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
решает проблему.