首先:很难相信你的字体目录是C:\\
。您假设您有一个带有路径的文件C:\\arialuni.ttf
而我假设 MS Arial Unicode 的路径是C:\\windows\fonts\arialuni.ttf
.
第二:我不认为arialuni
是正确的名字。我很确定它是arial unicode ms
。您可以通过运行以下代码来检查:
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontProvider.register("c:/windows/fonts/arialuni.ttf");
for (String s : fontProvider.getRegisteredFamilies()) {
System.out.println(s);
}
输出应该是:
courier
arial unicode ms
zapfdingbats
symbol
helvetica
times
times-roman
这些是您可以使用的值;arialuni
不是其中之一。
另外:您是否在错误的位置定义了字符集?
我稍微修改了您的源代码,因为我将 HTML 存储在 HTML 文件中西里尔文.html http://itextpdf.com/sites/default/files/cyrillic.html:
<html>
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8"/>
</head>
<body>
<h4 style="font-family: Arial Unicode MS, FreeSans; font-size:16px; font-weight: normal; " >Здраво Kristijan!</h4>
</body>
</html>
请注意,我替换了arialuni
with Arial Unicode MS
我用过FreeSans
作为替代字体。在我的代码中,我使用了FreeSans.ttf
代替arialttf
.
See 解析Html11 http://itextpdf.com/sandbox/xmlworker/ParseHtml11:
public static final String DEST = "results/xmlworker/cyrillic.pdf";
public static final String HTML = "resources/xml/cyrillic.html";
public static final String FONT = "resources/fonts/FreeSans.ttf";
public void createPdf(String file) throws IOException, DocumentException {
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
// step 3
document.open();
// step 4
XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
fontImp.register(FONT);
FontFactory.setFontImp(fontImp);
XMLWorkerHelper.getInstance().parseXHtml(writer, document,
new FileInputStream(HTML), null, Charset.forName("UTF-8"), fontImp);
// step 5
document.close();
}
正如你所看到的,我使用Charset
解析 HTML 时。结果如下:
如果您坚持使用 Arial Unicode,只需替换此行:
public static final String FONT = "resources/fonts/FreeSans.ttf";
有了这个:
public static final String FONT = "c:/windows/fonts/arialuni.ttf";
我已经在 Windows 机器上对此进行了测试,它也有效: