pdf 导出时不显示复选标记(Wingdings 字体)

Checkmark (Wingdings font) not displayed on pdf export

复选框在预览报表时正确显示,但在导出为 pdf 时不显示。

<staticText>
 <textElement textAlignment="Center">
  <font fontName="Wingdings" size="18"/>
 </textElement>
 <text><![CDATA[]]></text>
</staticText>

选中标记已从word文档复制到此处。

Wingdings 是 Jasper 中的内置字体,所以我想没有必要将它添加为字体扩展。

我正在使用 Jaspersoft Studio 5.6

这就是我选择 Font Windings 的方式,所以我假设它是内置在 Jasper 中的。

我认为 Wingdings 没有内置在 Jasper 中。您可以通过尝试在 Advanced Properties 选项卡中的 PDF Font Name 属性 中找到它来确认。在 XML 视图中,您可以放置​​:

<font fontName="Wingdings" pdfFontName="Wingdings"/>

但是在导出的过程中你会发现找不到Wingdings字体。 pdfFontName 也已弃用,因此您无论如何都不应该使用它。

看来您必须使用字体扩展。这是我的工作示例:

<staticText>
    <reportElement x="20" y="0" width="100" height="30" uuid="96ccfacd-cf1e-44b2-ae0f-69c863141ba7"/>
    <textElement>
        <font fontName="Wingdings"/>
    </textElement>
    <text><![CDATA[]]></text>
</staticText>

和字体扩展配置:

<fontFamilies>
    <fontFamily name="Wingdings">
        <normal>fonts/wd/wingding.ttf</normal>
        <pdfEncoding>Identity-H</pdfEncoding>
        <pdfEmbedded>true</pdfEmbedded>
    </fontFamily>
</fontFamilies>

编辑:

澄清一下:我的意思是 PDF 字体名称 如下所示

我必须说我不知道​​ ZapfDingbats 下面的这些字体是什么,但事实是这是列表中最后一个可用 PDF 的字体导出。

摘自com.itextpdf.text.FontFactoryImpclass作为证明:

ArrayList<String> tmp;
tmp = new ArrayList<String>();
tmp.add(FontFactory.COURIER);
tmp.add(FontFactory.COURIER_BOLD);
tmp.add(FontFactory.COURIER_OBLIQUE);
tmp.add(FontFactory.COURIER_BOLDOBLIQUE);
fontFamilies.put(FontFactory.COURIER.toLowerCase(), tmp);
tmp = new ArrayList<String>();
tmp.add(FontFactory.HELVETICA);
tmp.add(FontFactory.HELVETICA_BOLD);
tmp.add(FontFactory.HELVETICA_OBLIQUE);
tmp.add(FontFactory.HELVETICA_BOLDOBLIQUE);
fontFamilies.put(FontFactory.HELVETICA.toLowerCase(), tmp);
tmp = new ArrayList<String>();
tmp.add(FontFactory.SYMBOL);
fontFamilies.put(FontFactory.SYMBOL.toLowerCase(), tmp);
tmp = new ArrayList<String>();
tmp.add(FontFactory.TIMES_ROMAN);
tmp.add(FontFactory.TIMES_BOLD);
tmp.add(FontFactory.TIMES_ITALIC);
tmp.add(FontFactory.TIMES_BOLDITALIC);
fontFamilies.put(FontFactory.TIMES.toLowerCase(), tmp);
fontFamilies.put(FontFactory.TIMES_ROMAN.toLowerCase(), tmp);
tmp = new ArrayList<String>();
tmp.add(FontFactory.ZAPFDINGBATS);
fontFamilies.put(FontFactory.ZAPFDINGBATS.toLowerCase(), tmp);