我正在使用flying saucer与 iText 2.1.7 转换html to pdf
。它运行正常,但是当html中有一些中文,韩文等字符时会出现问题。
我的PDF中出现了意外的字符而不是普通的中文字符
我发现this issue已打开,所以我假设目前还没有办法让飞碟正确渲染PDF?
PS:我也找到this issue,但我无法理解他们提供的解决方案。
这是我正在使用的代码
String doc = file.toURI().toURL().toString();
ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont (
"C:\\ARIALUNI.TTF",
BaseFont.IDENTITY_H,
BaseFont.EMBEDDED
);
renderer.setDocument(doc);
String outputFile = "report.pdf";
OutputStream os = new FileOutputStream(outputFile);
renderer.layout();
renderer.createPDF(os);
os.flush();
os.close();
文件是我要转换的html。
是否有其他方法或库可以做同样的事情?
这是我正在使用的CSS
@font-face {
font-family: "Arial";
src: url("media/arialuni.ttf");
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
我需要转换的HTML file
These是与itext 2.1..x
兼容的重新编译的飞碟答案 0 :(得分:3)
您的字体可能未嵌入PDF文件中。 (How do I know if the fonts in a PDF file are embedded or not?)
每个字体都有一个名字,ARIALUNI.TTF定义了Arial Unicode MS,你应该使用它。
所以改变这个:
@font-face {
font-family: Arial1;
src: url("arialuni.ttf");
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
* {
font-family: Arial1;
}
对此:
@font-face {
font-family: Arial Unicode MS;
src: url("arialuni.ttf");
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
* {
font-family: Arial Unicode MS;
}
这样就可以嵌入字体。
你不需要拨打renderer.getFontResolver().addFont
,css就足够了。
答案 1 :(得分:1)
试试这个:
font.addFont(Html2Pdfs.class.getResource("SIMSUN.TTC").toString().substring(6),BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED)