iText не отображает китайские / корейские символы

У меня есть HTML-строка с китайскими / корейскими символами. Я хочу конвертировать HTML в PDF, используя iText. Я прочитал, что нам нужно встроить FONT в PDF, чтобы символы Unicode отображались в PDF.

Когда я пытаюсь встроить wts11.ttf (с кодировкой IDENTITY_H) или STSong-Light(с кодировкой UniGB-UCS2-H), я вижу только китайские символы, но не вижу корейские символы. Я попытался использовать arialuni.ttf (с кодировкой IDENTITY_H), но все еще могу видеть только китайские символы, но не корейский.

Может кто-нибудь подскажите пожалуйста какой должен быть точный шрифт. Или если я что-то упустил.

Ниже приведен фрагмент кода:

Document document = new Document();
Paragraph paragraph=new Paragraph();
PdfWriter.getInstance(document, baos);
document.open();
BaseFont bff = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
Font f = new Font(bff);

// FontFactory.registerDirectories(); 
// Font f = FontFactory.getFont("Arial Unicode MS", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

document.add(new Paragraph());
HTMLWorker htmlWorker = new HTMLWorker(document);

List<Element> objects=htmlWorker.parseToList(new StringReader(message),null);
paragraph.setFont(f);
for (Element elem : objects) {
    paragraph.add(elem);
}
document.add(paragraph);

2 ответа

Существуют различные способы решения этой проблемы, если вы переходите на использование XML Worker.

Я повторно использовал код из официальных примеров, точнее, примера ParseHtmlAsian, и адаптировал HTML, который используется в качестве источника для этого примера, следующим образом:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
    <p><span style="font-size:12.0pt; font-family:MS Mincho">長空</span>
    <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Broken Sword),</span>
    <span style="font-size:12.0pt; font-family:MS Mincho">秦王殘劍</span>
    <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Flying Snow),</span>
    <span style="font-size:12.0pt; font-family:MS Mincho">飛雪</span>
    <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Moon), </span>
    <span style="font-size:12.0pt; font-family:MS Mincho">如月</span>
    <span style="font-size:12.0pt; font-family:Times New Roman,serif">(the King), and</span>
    <span style="font-size:12.0pt; font-family:MS Mincho">秦王</span>
    <span style="font-size:12.0pt; font-family:Times New Roman,serif">(Sky).</span></p>
    <p style="font-size: 12.0pt; font-family:Batang">빈집</p>
    <p>Test</p>
    </body>
</html>

Результат выглядит так:

Как видите, весь текст отображается правильно, поэтому, пожалуйста, не распространяйте некорректные сообщения, такие как "iText not рендеринг китайских / корейских символов";-)

Пожалуйста, перешлите этот ответ своему руководству, чтобы ваш технический директор понимал, что инвестировать время в старую версию iText дороже, чем покупать лицензию на использование новой версии iText.

  1. Загрузите шрифт Malgun-Gothic-Bold_29380.ttf.
  2. сохраните его в шрифт asset->fonts->Malgun-Gothic-Bold_29380.ttf
  3. этот код будет работать для cjk и английского и vitenames

Font fontbold = FontFactory.getFont ("assets / fonts / Malgun-Gothic-Bold_29380.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12);

Другие вопросы по тегам