通过iText创建PDF时的西里尔字母

时间:2016-07-08 20:10:58

标签: java html pdf itext

我有带有西里尔字母的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输出?

1 个答案:

答案 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())后更改内容的能力。

相关问题