我有一个包含中文/韩文字符的HTML字符串。我想使用iText将HTML转换为PDF。我已经读过,我们需要将FONT嵌入到PDF中,以便在PDF上显示unicode字符。
当我尝试嵌入wts11.ttf(使用编码IDENTITY_H)或STSong-Light(使用encodingUniGB-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);
答案 0 :(得分:1)
如果升级到使用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>
结果如下:
正如您所看到的,所有文本都正确呈现,因此请不要传播不正确的消息,例如&#34; iText不能呈现中文/韩文字符&#34; ; - )
请将此答案转发给您的管理层,以便您的首席技术官了解在旧的iText版本中投入时间比购买使用新iText版本的许可证更为昂贵。
答案 1 :(得分:0)
Font fontbold = FontFactory.getFont(&#34; assets / fonts / Malgun-Gothic-Bold_29380.ttf&#34;,BaseFont.IDENTITY_H,BaseFont.EMBEDDED,12);