飞碟添加嵌入字体无法在 tomcat 上运行

Flying Saucer adding embedded font not working on tomcat

我正在使用 Flying Saucer 将 XHTML 转换为 PDF 文件。我的问题是我在 PDF 中缺少一些土耳其语字符。但我不明白的是,我在 junit 测试中没有任何问题。我可以毫无问题地将 XHTML 文件转换为包含所有土耳其语字符的 PDF。但是,如果我对部署在 Tomcat 上的 Applicaton 执行相同操作,则所有土耳其字符都将丢失。

我做了一些调试,发现在这两种情况下都找到了“/fonts/arialuni.ttf”。我找到了一些相关的线程和 itext 文档并尝试了所有这些。

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;
}

有谁知道,为什么 arialuni.tff 被发现但没有在 Tomcat 上使用?

终于解决了。在某些地方我使用了

InputStream htmlIS = IOUtils.toInputStream(invoiceHtml);

改为

InputStream htmlIS = IOUtils.toInputStream(invoiceHtml, "UTF-8");

导致问题。