iText无法呈现中文/韩文字符

时间:2015-01-09 16:52:16

标签: unicode character-encoding itext font-embedding

我有一个包含中文/韩文字符的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);

2 个答案:

答案 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>

结果如下:

enter image description here

正如您所看到的,所有文本都正确呈现,因此请不要传播不正确的消息,例如&#34; iText不能呈现中文/韩文字符&#34; ; - )

请将此答案转发给您的管理层,以便您的首席技术官了解在旧的iText版本中投入时间比购买使用新iText版本的许可证更为昂贵。

答案 1 :(得分:0)

  1. dowload Malgun-Gothic-Bold_29380.ttf font。
  2. 将其存储在asset-&gt; fonts-&gt; Malgun-Gothic-Bold_29380.ttf字体
  3. 此代码适用于cjk和英语以及vitenames
  4. Font fontbold = FontFactory.getFont(&#34; assets / fonts / Malgun-Gothic-Bold_29380.ttf&#34;,BaseFont.IDENTITY_H,BaseFont.EMBEDDED,12);