Удалить несколько встроенных шрифтов в pdf, созданных с pdfTk

есть ли способ удалить шрифты, встроенные несколько раз из файла pdf?

Это мой сценарий:

1) программа генерирует несколько одностраничных pdf-отчетов (запрашивает БД, помещает информацию в шаблон excel и экспортирует отформатированную информацию в pdf)

2) pdftk сливает одностраничные PDF-файлы в один файл.

все работает нормально, но размер полученного pdf очень большой: на самом деле я заметил, что шрифты встроены несколько раз (столько раз, сколько количество страниц: все страницы генерируются, начиная с одного шаблона excel, шрифты встроены в один pdf-файл и pdftk просто клеит pdf). Есть ли способ сохранить только одну копию каждого встроенного шрифта?

Я попытался внедрить шрифты только на первой странице при экспорте из excel - > pdf: Размер файла резко уменьшается, но кажется, что другие страницы не могут получить доступ к встроенному шрифты.

спасибо, Алессандро!--1-->

2 ответов


вы можете попытаться "восстановить" PDF-файл pdftk-concatenated с помощью Ghostscript (но используйте последнюю версию, например 9.05). Во многих случаях Ghostscript сможет объединить множество вложенных шрифтов в меньшее количество.

команда будет выглядеть так:

gswin32c.exe ^
    -o output.pdf ^
    -sDEVICE=pdfwrite ^
    -dPDFSETTINGS=/prepress ^
     input.pdf

чека с

pdffonts.exe  output.pdf
pdffonts.exe  input.pdf 

сколько экземпляров различных подмножеств шрифтов в каждом файле (pdffonts.exe доступна здесь как часть небольшого пакет инструментов командной строки).

но не жалуйтесь на "медленную скорость" этого процесса-Ghostscript полностью интерпретирует все входные файлы PDF для выполнения своей задачи, в то время как конкатенация файлов pdftk является гораздо более простым процессом...


обновление:

вместо pdftk вы можете использовать Ghostscript для объединения входных PDF-файлов. Это могло бы избежать проблемы, которую вы видели с апостериорным Ghostscript "ремонт" ваших pdftk-Объединенных файлов. Обратите внимание, это будет намного медленнее, чем "тупой" pdftk merge. Однако результаты могут понравиться вам лучше, особенно в отношении обработки шрифтов и размера файла.

это была бы возможная команда:

gswin32c.exe ^
    -o output.pdf ^
    -sDEVICE=pdfwrite ^
    -dPDFSETTINGS=/prepress ^
     input.pdf

вы можете добавить дополнительные параметры в CLI Ghostscript для более тонкого управления процессом слияния и оптимизации.

в конце концов вам придется выбор между крайностями:

  • ' Fast'pdftk производить большие выходные файлы, и
  • 'медленно' gswin32c.exe (Ghostscript) создание файлов бережливого производства.

мне было бы интересно, если бы вы опубликовать некоторые результаты (время выполнения и в результате размеры файлов) для обоих методов для ряда процессов слияния...


обновление 2: извините, моя предыдущая версия содержала опечатку.
Это не -sPDFSETTINGS=... но это должно быть -dPDFSETTINGS=... (d на месте s).


обновление 3:

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

  • для каждого шрифта и грани (standard, italic, bold, bold-italic) добавить таблицу ячейка в лист шаблона в левом верхнем углу зоны печати.
  • Заполните эту ячейку таблицы всеми печатными символами и знаками препинания из алфавита ASCII:0123456789, ABCD...XYZ, abc...xyz, :-_;°%&$§")({}[] etc.
  • сделайте ячейку (и размер шрифта) как можно меньше, чтобы не нарушать общий макет. Используйте белый цвет для форматирования символов в ячейке (чтобы они казались невидимыми в финале документ PDF.)

этот метод, надеюсь, убедитесь, что каждый из ваших PDF-файлов будет использовать одно и то же подмножество глифов, что позволит избежать проблем, которые вы наблюдали при объединении файлов с Ghostscript. (обратите внимание, что вы, если вы используете f.e. Arial и Arial-Italic, вы должны создать 2 такие ячейки:одна отформатирована стандартным шрифтом Arial, другая-курсивом.)


шрифты обычно являются подмножеством при создании PDF-файлов, так что они содержат только необходимые глифы. Кроме того, кодировка изменяется так, что первому используемому глифу присваивается код символа 1, второму-2 и так далее.

в результате первый файл PDF может содержать шрифт, где 0x01 = A, 0x02 = space, 0x03 = t, 0x04 = e и 0x05 = s. Второй файл может содержать шрифт, где 0x01 = T, 0x02 = e, 0x03 =s, 0x04 = t

чтобы не запутаться, префикс добавляется к названию шрифта в документе. Этот префикс удаляется Acrobat при отображении встраивания шрифта, поэтому он кажется как вам иметь несколько экземпляров одного и того же шрифта. Однако они на самом деле отличаются шрифтом и не могут быть легко объединены.

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