Как заставить PDFsharp вставлять только часть шрифта?

Я могу успешно создавать PDF-файлы, используя PDFsharp и MigraDoc. Два частных шрифта (формат OTF) используются для создания одностраничного PDF. Созданный PDF-файл содержит оба встроенных шрифта. К сожалению, каждый шрифт также содержит китайские буквы, поэтому его размер составляет около 4 МБ, каждый из которых имеет размер файла PDF около 9 МБ (содержащий только одну страницу с небольшим количеством текста!).: Шок:

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

Могу ли я использовать специальные настройки?Кто-нибудь может указать мне правильное направление?

Обновление: я использовал fontforge для извлечения вложенной подгруппы шрифтов и обнаружил, что шрифты, полученные из pdf, точно соответствуют файлам полного шрифта. Так что никакое подмножество шрифтов действительно не используется вообще.:(

Взглянув на источники PDFsharp, я нашел функцию

public OpenTypeFontface CreateFontSubSet(Dictionary<int, object> glyphs, bool cidFont)

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

Я не понимаю, почему эта функция не используется при создании моего PDF.Каким критериям нужно соответствовать, чтобы это работало?

2 ответа

Только что нашел решение моей проблемы, которое не требует больших усилий с дополнительными PDF-фреймворками. Я могу создавать наборы шрифтов, используя ghostscript (командная строка).

Фактически, ghostscript берет сгенерированный файл (pdfsharp-) и переписывает его (оптимизируя шрифты). Вот решение командной строки:

gswin64 -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dCompressFonts=true -dSubsetFonts=true -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=optimized.pdf -c ".setpdfwrite <</NeverEmbed [ ]>> setdistillerparams" -f my_pdfsharp.pdf

Размер моего файла около 9 МБ теперь уменьшен до 51 КБ. Yihaa!!!

Некоторые шрифты имеют "таблицу локаций", а некоторые - нет. Таблица loca хранит смещения к местоположениям глифов в шрифте.

CreateFontSubSet is и может быть вызван только для шрифтов с таблицей loca, которая предоставляет информацию, необходимую для создания подмножеств.

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