我遇到了问题, JasperReports 仍然无法找到Arial字体。
我创建了一个具有以下结构的简单Maven项目,并将其包含在我的主应用程序中。因此主应用程序在类路径中包含已安装的JAR:
- jasperreports_extension.properties
- fonts
|-> arial
|-> ariali.ttf
|-> arialbi.ttf
|-> arialbd.ttf
|-> arial.ttf
|-> fonts.xml
但在将报告导出为PDF时,我仍然会看到以下异常。
net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font :
pdfFontName : Arial
pdfEncoding : Identity-H
isPdfEmbedded : true
jasperreports_extension.properties
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.arial=fonts/fonts.xml
fonts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="Arial">
<normal>fonts/arial/arial.ttf</normal>
<bold>fonts/arial/arialbd.ttf</bold>
<italic>fonts/arial/ariali.ttf</italic>
<boldItalic>fonts/arial/arialbi.ttf</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
</fontFamily>
</fontFamilies>
模板
<font fontName="Arial" size="8" pdfFontName="Arial" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
答案 0 :(得分:2)
问题在于模板本身:在一个font-tag中缺少<fontName>
属性:
不起作用:
<font size="12" isBold="true" pdfFontName="Arial"/>
工作:
<font fontName="Arial" size="12" isBold="true" pdfFontName="Arial" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
答案 1 :(得分:0)
另一种解决方案为我工作的是:
JRProperties.setProperty(“net.sf.jasperreports.default.pdf.font.name”,“Helvetica”); JRProperties.setProperty(“net.sf.jasperreports.default.pdf.encoding”,“UTF-8”); JRProperties.setProperty(“net.sf.jasperreports.default.pdf.embedded”,“true”);
如果从java端设置参数, 你必须指定font.name和 Helvetica 保存一天。 我在这里试过Arial,但是犯了同样的错误。
答案 2 :(得分:0)
将字体文件(*。ttf)复制到文件夹中:
/path/to/app/WEB-INF/classes/***HERE***
你的app会从这里获得字体:)
答案 3 :(得分:0)
您必须为PDF导出器指定正确的字体名称。您的字体存在于嵌入字体jar中。您不需要再将它们放入classes目录中; - )
pdf导出器有正确的fonts.xml内容(可能名称区分大小写,请注意):
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="Arial">
<normal>
<ttf>fonts/Arial/ARIAL.TTF</ttf>
<pdf>fonts/Arial/ARIAL.TTF</pdf>
</normal>
<bold>
<ttf>fonts/Arial/ARIALBD.TTF</ttf>
<pdf>fonts/Arial/ARIALBD.TTF</pdf>
</bold>
<italic>
<ttf>fonts/Arial/ARIALI.TTF</ttf>
<pdf>fonts/Arial/ARIALI.TTF</pdf>
</italic>
<boldItalic>
<ttf>fonts/Arial/ARIALBI.TTF</ttf>
<pdf>fonts/Arial/ARIALBI.TTF</pdf>
</boldItalic>
<pdfEncoding>Cp1252</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
</exportFonts>
</fontFamily>
</fontFamilies>
我希望这有帮助。
此致 吨。
答案 4 :(得分:0)
就我而言,我正在使用:
<font fontName="Arial" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
我必须删除pdffontName
,正确的字体标签是:
<font fontName="Arial" pdfEncoding="Cp1256"/>
注意 我正在使用包含以下.xml文件的字体jar:
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="Arial">
<normal><![CDATA[fonts/arial.ttf]]></normal>
<pdfEncoding><![CDATA[Identity-H]]></pdfEncoding>
<pdfEmbedded><![CDATA[true]]></pdfEmbedded>
</fontFamily>
</fontFamilies>