我有带有西里尔字母的HTML页面,我使用iText库从HTML转换为PDF。我不直接使用iText并使用XMLWorkerHelper
进行转换:
OutputStream file = new FileOutputStream(outputFile);
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, file);
document.open();
InputStream is = new ByteArrayInputStream(htmlContentString.getBytes());
XMLWorkerHelper.getInstance().parseXHtml(writer, document, is);
document.close();
writer.close();
file.close();
不幸的是,我根本无法在输出PDF文件中看到西里尔字母。
如何准备源HTML文件(某些字体标签,CSS属性等)以正确获取PDF输出?
答案 0 :(得分:2)
问题的原因是 iText 内部使用没有西里尔字母的字体进行PDF渲染。
因此解决方案是为任何PDF元素定义带西里尔字母的字体(例如默认的Windows Arial 字体)。可以通过在parseXHtml
调用中指定CSS文件作为参数来实现:
...
XMLWorkerHelper.getInstance().parseXHtml(writer, document, is, getStylesStream());
...
private InputStream getStylesStream() {
return PdfReport.class.getResourceAsStream("/reports/styles.css");
}
并且styles.css
应该是
* {
/* Enforces to use font with Cyrillic letters */
font-family: Arial;
}
但是,这种方法会丢失任何默认的iText样式。所以我在我的styles.css中复制了来自 xmlworker.jar 的 default.css 文件的所有内容。
不幸的是,禁止在内存中加载default.css的内容(通过XMLWorkerHelper.getInstance()。getDefaultCSS())后更改内容的能力。