Как встроить шрифт в PDF, созданный из HTML с помощью iText и Flying Saucer?
у меня проблема с внедрением польских шрифтов в PDF, преобразованных из HTML.
мой HTML-код имеет стиль в теле:
<BODY style="font-family: Tahoma, Arial, sans-serif;font-size : 8pt;">
Я пробовал 2 способа преобразования такого HTML в PDF:
- FOP с htmlcleaner
- iText с летающей тарелкой
для FOP я могу добавить все используемые шрифты в свой конфигурационный файл, а затем создать PDF, чтобы эти шрифты были встроены (если шрифт используется в HTML). В результате PDF у меня есть шрифт Tahoma в Личность-ч кодирования. Он выглядит хорошо-все польские буквы отображаются как ожидалось.
затем я попробовал такое преобразование с помощью iText: кажется проще, потому что мне не нужно создавать преобразование для каждого HTML. К сожалению, я не знаю, как вставлять используемые шрифты в результирующий PDF. Большинство примеров, которые я нашел, создают PDF с нуля, и я не знаю, как применить эти методы к летающей тарелке ITextRenderer или другому объекту, используемому в преобразовании.
мой текущий код пытается добавить шрифты в PDFCreationListener.preOpen()
на получение ITextFontResolver
и при добавлении шрифта fs.addFont(path, true);
. Но все .pdf, который я создаю, не имеет шрифтов, которые я хочу.
вторая проблема заключается в том, что результат PDF не имеют польских букв. Это проблема в летающей тарелке или в iText? Acrobat показывает, что созданный PDF-документ использует Helvetica с кодировкой Ansi и ArialMT в качестве шрифта. Я думаю, что эта кодировка Ansi не хороша. Как установить польское кодирование (Identity-H)?
2 ответов
вы можете попробовать правила css-FS-pdf-font-embed и-FS-pdf-font-encoding.
- fs-pdf-шрифт-embed: использовать со значением, встроенным в правило шрифта чтобы летающая тарелка вставляла файл шрифта в PDF-документ, во избежание необходимости вызова метода addFont () FontResolver класс!--2-->
- fs-pdf-шрифт-кодировка: используйте внутри правила шрифта для укажите enconding для пользовательского шрифта, который вы внедряете в PDF; принимает имя кодировки как значение.
например, в вашем css печати:
@font-face {
font-family: DejaVu Serif;
src: url(fonts/DejaVuSerif.ttf);
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
моей ошибкой было использовать FontResolver.addFont()
на PDFCreationListener.preOpen()
. Я передвинул его как раз перед renderer.layout();
и это работает сейчас!