2015-09-08 3 views
1

Меня попросят включить частичный шрифт в pdf. Я думаю, что буду использовать iText, и я нашел, как встроить шрифт, но я не нашел понятия о частичном встраивании.Pdf частичное вложение шрифтов с помощью iText

Кто-нибудь знает, является ли частичное вложение автоматическим? Или, может быть, у iText нет этой функции?

спасибо.

+0

Добро пожаловать в StackOverflow! Я не понимаю ни слова. Это хороший технический вопрос. Он заслуживает всеобъемлющего ответа, потому что это не тривиально: есть правила, а затем есть исключения (см. Мой ответ). –

ответ

2

Когда iText вставляет полный шрифт, подмножество или нет шрифта?

В этом ответе, предполагается, что вы используете BaseFont класс и Font класс вроде этого:

BaseFont bf = BaseFont.createFont(pathToFont, encoding, embedded); 
Font font = new Font(bf, 12); 

В этом фрагменте:

  • pathToFont путь к файлу шрифта (.ttf, .ttc, otf, .afm),
  • encoding - это кодировка, такая как «winansi», BaseFont.IDENTITY_H, ...
  • embedded является логическим: true или false.

Будет ли iText вставлять шрифт или нет?

Вот определяется параметром embedded:

  • Если false, шрифт не встроен.
  • Если true, шрифт встроен, за исключением в случае Standard Type 1 шрифты или Type 1 шрифтов, для которых файл .pfb отсутствует или CJK шрифтов.

Что касается исключения:

  • В Стандартного типа 1 шрифты 4 вкусов Helvetica (обычный, жирный, курсив, полужирный курсив), 4 вкуса Times Roman (...) , 4 аромата Courier (...), Symbol и Zapfdingbats. iText поставляется с 14 файлами Adobe Font Metrics (AFM). Эти файлы содержат метрики, необходимые для вычисления ширины глифов и слов. iText не имеет необходимых файлов шрифтов шрифтов принтера (PFB), которые необходимы для встраивания шрифта.
  • Шрифты Type 1 хранятся в двух файлах: файле AFM и файле PFB. Если вы предоставите файл AFM, iText будет искать файл PFB в том же каталоге. Если iText не находит файл PFB, шрифт не может быть встроен.
  • CJK - это серия китайских, японских и корейских шрифтов, которые доступны в загружаемых пакетах шрифтов. Это особый тип азиатских шрифтов; Могут быть встроены азиатские шрифты в .ttf, .otf или .ttc.

Будет ли iText подмножать шрифт или нет?

IText всегда будет пытаться вставлять подмножество шрифта, а не весь шрифт, кроме в случае, если вы предоставляете 1 шрифт Type (AFM и PFB файл). В случае, если предоставляется шрифт Type 1, встроен шрифт .

Может ли iText вставить полный шрифт?

Да, вы можете заставить IText встроить полный шрифт, добавив следующую строку:

bf.setSubset(false); 

Однако это значение будет игнорироваться в случае, если вы используете кодировку Identity-H, потому что это, как это описано в ISO- 32000-1. iText будет вставлять только полные шрифты, которые хранятся в PDF как простой шрифт (256 символов); iText никогда не будет вставлять шрифты, которые хранятся в виде составного шрифта (до 65535 символов).

Смежные вопросы