Java,Jasper PDF Export,将OpenSansEmoji与DejaVuSans结合

时间:2018-09-04 07:55:39

标签: fonts jasper-reports emoji

好吧,我正在尝试导出一个PDF,其中将包含同时包含常规拉丁字符和表情符号的文本字段。文本是由用户通过html表单输入的,即使我从Java端重新获取了它们(我认为字符可能已损坏),我也可以确认在浏览器中正确显示了表情符号。不幸的是,尽管我尝试按照community.jaspersoft的步骤进行操作,但仍然没有得到预期的结果。

我尝试了什么:

从JasperSoft Studio导出了一个包含所有字体(ttfs)的jar,编译了jrxml并将它们包括在类路径中,但是表情符号在PDF中仍以空格的形式出现。

我已从此github link下载了用于表情符号的ttf,并从here下载了dejavu

我还没有尝试过:

  • 将所有字体合并为一个ttf(这可行吗?)
  • 将文本导出为原始图像,而不是jrxml中的文本字段(同样不确定是否可行)

所以主要问题是那是否可行,因为我可以看到其他人在没有适当答案的情况下寻找同一问题,如果没有,我还有其他可以尝试的方法吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

JAR中有一个文件 fonts / fontsfamily [someRandomNumber] .xml ,该文件是从JasperSoft Studio导出的带有TTF字体的。查看文件,确保在pdfEmbedded上设置了true,在pdfEncoding上设置了Identity-H

例如,在我的情况下,没有pdfEncoding元素,然后表情符号被渲染为空格,但是当我添加<pdfEncoding>Identity-H</pdfEncoding>表情符号时,渲染正确。

以下是该XML文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
    <fontFamily name="OpenSansEmoji">
        <normal>fonts/OpenSansEmoji/OpenSansEmoji.ttf</normal>
        <pdfEmbedded>true</pdfEmbedded>
        <pdfEncoding>Identity-H</pdfEncoding>
        <exportFonts/>
    </fontFamily>
</fontFamilies>

或者您可以在JasperSoft Studio中通过编辑字体系列属性然后进行新的JAR导出来实现: JasperSoft Studio - Font Family properties