Учитывая парсер рекурсивного спуска, как мне изменить его для синтаксического анализа?

Есть 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 .

0
задан Cody P 4 March 2019 в 22:43
поделиться