JasperReports 5.6:无法加载以下字体

时间:2014-08-28 12:06:08

标签: java fonts jasper-reports

我遇到了问题, 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"/>

5 个答案:

答案 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>