我使用Flying Saucer将XHTML转换为PDF文件。我的问题是我在PDF中有一些丢失的土耳其字符。但是我不明白,我在junit测试中没有任何问题。我可以将XHTML文件转换为包含所有土耳其语字符的PDF,没有任何问题。但如果我在Tomcat上部署的Applicaton上执行相同的操作,则所有土耳其字符都会丢失。
我做了一些调试,发现' /fonts/arialuni.ttf'在两种情况下均可找到。我找到了一些相关的线程和itext doc并尝试了所有这些。
http://developers.itextpdf.com/question/how-can-i-load-font-web-infresourcesfontsfoobarttf
Flying Saucer font for unicode characters
转换和添加字体的代码
String path2 = "/fonts/arialuni.ttf";
//FontFactory.register(path2);
ITextRenderer renderer = new ITextRenderer();
// renderer.getFontResolver().addFontDirectory(path2,true);
renderer.getFontResolver().addFont(path2, BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
renderer.setDocumentFromString(docElem.html());
renderer.layout();
renderer.createPDF(os);
renderer.finishPDF();
baoOut.flush();
并且还为CSS应用了以下内容。但结果仍然相同。
@font-face {
src: url('arialuni.ttf'); <!--src: url('/fonts/arialuni.ttf'); -->
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
body {
font-family: Arial Unicode MS, Lucida Sans Unicode, Arial, verdana, arial, helvetica, sans-serif;
font-size: 8.8pt;
}
&#13;
有谁知道,为什么找到arialuni.tff但是没有在Tomcat上使用?
答案 0 :(得分:0)
InputStream htmlIS = IOUtils.toInputStream(invoiceHtml);
代替
InputStream htmlIS = IOUtils.toInputStream(invoiceHtml, "UTF-8");
造成了问题。