Как встроить шрифт в 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(); и это работает сейчас!