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.
- Загрузите шрифт Malgun-Gothic-Bold_29380.ttf.
- сохраните его в шрифт asset->fonts->Malgun-Gothic-Bold_29380.ttf
- этот код будет работать для cjk и английского и vitenames
Font fontbold = FontFactory.getFont ("assets / fonts / Malgun-Gothic-Bold_29380.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 12);