【问题标题】:JasperReports 5.6: Could not load the following fontJasperReports 5.6:无法加载以下字体
【发布时间】:2014-10-22 07:01:08
【问题描述】:

我面临的问题是,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"/>

【问题讨论】:

  • 您使用的是什么版本的 jasper 报告?
  • JasperReport 和 iReport 版本:5.6.0
  • 我在 5.5.0 上也遇到了同样的问题,我通过切换到 5.0.0 解决了这个问题
  • 谢谢,但我仍然看到异常,即使使用 5.0.0
  • 尝试在您的 jdk 文件夹 (jdk1.x.x_xx/jre/lib/fonts) 中添加字体。这会让你失去便携性,但至少我们可以理解问题是包装还是其他

标签: java fonts jasper-reports


【解决方案1】:

就我而言,我使用的是:

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

【讨论】:

    【解决方案2】:

    您必须为 PDF 导出器提供正确的字体名称。您的字体呈现在嵌入的字体 jar 中。您不需要再次将它们放入类目录中;-)

    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>
    

    希望对你有所帮助。

    问候, T.

    【讨论】:

      【解决方案3】:

      将字体文件(*.ttf)复制到文件夹中:

      /path/to/app/WEB-INF/classes/***HERE***
      

      您的应用将从这里获取字体 :)

      【讨论】:

        【解决方案4】:

        另一个解决方案为我工作是:

        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,但抛出了同样的错误。

        【讨论】:

          【解决方案5】:

          问题在于模板本身:在一个字体标签处缺少&lt;fontName&gt; 属性:

          不起作用:

          <font size="12" isBold="true" pdfFontName="Arial"/>
          

          有效:

          <font fontName="Arial" size="12" isBold="true" pdfFontName="Arial" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
          

          【讨论】:

          • 我不明白。我有同样的问题,但只在 Linux 上。在 Windows 上它工作得很好,所以,我认为问题不是模板,而是扩展的加载。
          • @Gustavo 奇怪的是,它发生在 Windows 上,而不是 Linux 上。没有东西可以尝试...
          猜你喜欢
          • 2013-09-10
          • 1970-01-01
          • 1970-01-01
          • 2016-08-03
          • 2018-04-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-16
          相关资源
          最近更新 更多