尝试使用 iText 将越南语文档导出为 PDF 时遇到问题。我把越南语单词放在这样的 .xml 文件中
<td fontfamily="Helvetica" fontstyle="0" fontsize="9" align="0" colspan="48" lineoccupied="1">T\u1ED5 ch\u1EE9c tham gia</td>
然后让java从xml文件中获取短语并使用以下方法将其转换为Unicode:
public String convertToUnicode(String s) {
int i = 0, len = s.length();
char c;
StringBuffer sb = new StringBuffer(len);
try {
while (i < len) {
c = s.charAt(i++);
if (c == '\\') {
if (i < len) {
c = s.charAt(i++);
if (c == 'u') {
if (Character.digit(s.charAt(i), 16) != -1
&& Character.digit(s.charAt(i + 1), 16) != -1
&& Character.digit(s.charAt(i + 2), 16) != -1
&& Character.digit(s.charAt(i + 3), 16) != -1) {
if (s.substring(i).length() >= 4) {
c = (char) Integer.parseInt(s.substring(i, i + 4), 16);
i += 4;
} else {
sb.append('\\');
}
} else {
sb.append('\\');
}
} // add other cases here as desired...
}
} // fall through: \ escapes itself, quotes any character but u
sb.append(c);
}
} catch (Exception e) {
System.out.println("Error Generate PDF :: " + e.getStackTrace().toString());
return s;
}
return sb.toString();
}
之后,将字符串导出为 PDF - 编码 UTF-8。但是程序无法显示越南语字符 '\u1ED5' 和 '\u1EE9' 输出变成“T chc tham gia”你能告诉我如何解决这个问题吗?谢谢 :)
iText 官方网站上有 3 个涉及亚洲语言的XML Worker 示例。它们解析包含中文字符的 XHTML 文件,但应该很容易使它们适应越南语示例。
您可以在此处找到要解析的 HTML 文件:
这两个文件都包含以下文本:
在第一种情况下,字体是使用 CSS 定义的:
在第二种情况下,没有定义特定的字体:
这些文件包含 UTF-8 字符,因此我们将像这样解析它们:
您需要的第一件事是支持越南语字符的字体。这是 iText 无法为您提供的帮助。在您的 HTML 文件中,您已经定义了 Helvetica,但这是一种标准的 Type1 字体,在使用 iText 时从未嵌入并且不知道如何绘制越南字形。那永远行不通。
第一个示例D07_ParseHtmlAsian将自动搜索名为
MS Mincho
. 如果找到该字体(例如,因为您msmincho.ttc
在 Windows 字体目录中有该字体),该字体将显示在您的 PDF 中。见英雄.pdf。如果没有找到具有该名称的字体,则字形将不可见,因为您没有为这些字形提供任何字体程序。第二个示例D07bis_ParseHtmlAsian提供了一种解决方法,以防您在
MS Mincho
任何地方都没有。在这种情况下,您必须使用 anXMLWorkerFontProvider
并注册一种可以代替MS Mincho
. 例如:我们使用存储在文件中的字体cfmingeb.ttf
并分配别名MS Mincho
:生成的文件asian.pdf与我们预期的略有不同,但现在我们至少可以看到中文字形。
在第三个示例中,HTML 文件没有告诉我们有关需要使用的字体的任何信息。我们将使用 CSS 定义字体,如下所示:
现在,正文中的所有文本都将使用字体 TSC FMing S TT(存储在文件中
cfmingeb.ttf
)。您可以在生成的 PDF asian2.pdf 中看到差异。