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.FontFactoryImp
class作为证明:
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);
复选框在预览报表时正确显示,但在导出为 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.FontFactoryImp
class作为证明:
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);