Есть 3 примера XML Worker , в которых участвуют азиатские языки на официальном веб-сайте iText. Они анализируют файл XHTML, содержащий китайские символы, но его легко адаптировать к вьетнамским примерам.
Вы можете найти файлы HTML, которые будут разбираться здесь:
Оба файла содержат следующий текст:
長空 (Сломанный меч), 秦王 殘劍 (Летающий снег), 飛雪 (Луна), 如月 (Царь) и 秦王 (Небо).
blockquote>
В в первом случае шрифт определяется с помощью CSS:
長空
Во втором случае определенный шрифт не определен:
長空 (Broken Sword), 秦王殘劍 (Flying Snow), 飛雪 (Moon), 如月 (the King), and 秦王 (Sky).
Эти файлы содержат символы UTF-8, поэтому мы будем разбирать их следующим образом:
XMLWorkerHelper.getInstance().parseXHtml(writer, document,
new FileInputStream(HTML), Charset.forName("UTF-8"));
Первое, что вам нужно, это шрифт, который поддерживает вьетнамские символы. Это то, что iText не может вам помочь. В вашем HTML-файле вы определили Helvetica, но это стандартный шрифт Type1, который никогда не встраивается при использовании iText и не знает, как рисовать вьетнамские глифы. Это никогда не сработает.
В первом примере D07_ParseHtmlAsian автоматически будет искать шрифт с именем MS Mincho
. Если он находит этот шрифт (например, потому что у вас msmincho.ttc
в вашем каталоге шрифтов Windows), шрифт будет отображаться в вашем PDF-файле. См. hero.pdf . Если он не найдет шрифт с этим именем, то глифы не будут видны, потому что вы не предоставили никакой программы шрифтов для этих глифов.
Второй пример D07bis_ParseHtmlAsian предлагает обходное решение, если у вас нет MS Mincho
в любом месте. В этом случае вы должны использовать XMLWorkerFontProvider
и зарегистрировать шрифт, который можно использовать вместо MS Mincho
. Например: мы используем шрифт, хранящийся в файле cfmingeb.ttf
, и назначаем псевдоним MS Mincho
:
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontProvider.register("resources/fonts/cfmingeb.ttf", "MS Mincho");
Полученный файл asian.pdf немного отличается от того, что мы ожидаем, но теперь мы можем хотя бы увидеть китайские глифы.
В третьем примере HTML-файл ничего не говорит нам о шрифте, который необходимо использовать. Мы определим шрифт с помощью CSS следующим образом:
CSSResolver cssResolver = new StyleAttrCSSResolver();
CssFile cssFile = XMLWorkerHelper.getCSS(new ByteArrayInputStream("body {font-family:tsc fming s tt}".getBytes()));
cssResolver.addCss(cssFile);
Теперь весь текст в теле будет использовать шрифт TSC FMing S TT (сохраненный в файле cfmingeb.ttf
). Вы можете увидеть разницу в полученном PDF asian2.pdf .