【问题标题】:Jasper stops finding one fontJasper 停止寻找一种字体
【发布时间】:2011-04-28 14:50:08
【问题描述】:

将 Jasper 升级到最新版本后,它不再找到一种字体:Symbol。其余的字体似乎都很好。我在运行 jasper 的同一目录中有一堆 ttfs,该程序只是一个用于生成 PDF 的小包装器,它抛出了这个错误:

net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'Symbol' is not available to the JVM. See the Javadoc for more details.
    at net.sf.jasperreports.engine.util.JRFontUtil.checkAwtFont(JRFontUtil.java:358)
    at net.sf.jasperreports.engine.util.JRStyledText.getAwtAttributedString(JRStyledText.java:226)
    at net.sf.jasperreports.engine.fill.TextMeasurer.measure(TextMeasurer.java:362)
    at net.sf.jasperreports.engine.fill.JRFillTextElement.chopTextElement(JRFillTextElement.java:1129)
    at net.sf.jasperreports.engine.fill.JRFillStaticText.prepare(JRFillStaticText.java:183)
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:329)
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:419)
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:378)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2028)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:757)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:269)
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:127)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:942)
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:860)
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:84)
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
    at XmlJasperInterface.report(XmlJasperInterface.java:82)
    at XmlJasperInterface.main(XmlJasperInterface.java:60)</pre>

程序运行所在目录:

# ls *.ttf
arial.ttf  arialbd.ttf  lsans.ttf  lsansd.ttf  lsansi.ttf  symbol.ttf

找到所有其他字体。哦,在我的笔记本电脑(macosx)中,它工作正常,它只在服务器(Debian)上中断。我打开了 symbol.ttf,它在 Mac OS X 上可以正常打开(以防文件损坏)。

有什么想法吗?

【问题讨论】:

    标签: fonts jasper-reports


    【解决方案1】:

    尝试添加行

    net.sf.jasperreports.awt.ignore.missing.font=true

    到您的 jasperreports.properties 文件。

    【讨论】:

    • 这不会让它找到字体,但它不会抱怨它并使用它可以使用的任何其他字体。由于这是以前的行为,并且之前每个人都对此感到满意,因此我只是这样做了,尽管它不是最佳解决方案。
    • 这并没有解决问题,只是忽略了问题。
    • 这是 jasperserver 的默认设置,但我仍然收到有关缺少字体的错误。
    【解决方案2】:

    在 ubuntu 上,我需要卸载字体并重新安装它们:

    sudo apt-get remove  ttf-mscorefonts-installer
    sudo apt-get install  ttf-mscorefonts-installer
    

    然后,它工作正常。

    【讨论】:

      【解决方案3】:

      字体必须安装在运行报表的操作系统中。

      【讨论】:

      • 确实如此。 jasperreports 查找操作系统中可用的字体。例如,如果您在 Windows 中设计报表并在 linux 中运行应用程序,您将获得与在 iReport 中看到的不同的东西,除非您使用可在两种环境中使用的字体。
      【解决方案4】:

      解决这个问题的简单步骤是

      1. 打开 jasperreports-x.x.x.jar,在我的例子中是 jasperreports-3.7.2.jar。
      2. 找到 default.jasperreports.properties 文件并打开它。
      3. 找到行 net.sf.jasperreports.awt.ignore.missing.font=false 并将值从 false 更改为 true net.sf.jasperreports.awt.ignore.missing。字体=true
      4. 更新 jar。
      5. 添加到项目的类路径中。

      问题解决了。

      【讨论】:

      • 无需编辑 JAR。您只需要创建一个 jasperreports.properties 并将其添加到类路径中,只需使用您要修改的属性(如接受的解决方案中所述)。
      • 我在从 Eclipse 运行课程时做到了这一点。但是当我导出为 Runnable jar 时它不起作用,它给了我以下错误“net.sf.jasperreports.engine.JRException:输入流未在:fonts.xml”
      【解决方案5】:

      我正在使用 JasperReports 6.3.1。我通过在.jrxml 中添加以下行解决了这个问题:

      <property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>
      

      这样,我们的报告看起来会有所不同,具体取决于系统中预装的字体。就我而言,这并不代表问题,而且我对在我的项目中添加额外的字体不感兴趣,因为我需要尽可能轻。


      如果您想在所有运行时环境中使用报表的原始字体,一个简单的解决方案是向项目添加必要的依赖项。

      一个例子,对于 Maven:

      <dependency>
          <groupId>net.sf.jasperreports</groupId>
          <artifactId>jasperreports-fonts</artifactId>
          <version>6.0.0</version>
      </dependency>
      

      您也可以下载这些库并将它们手动添加到项目中,但它会起作用。


      我希望它们对你有用。

      【讨论】:

        【解决方案6】:

        2015 年更新:

        将此添加到(或取消注释)/etc/apt/sources.list

        deb http://us.archive.ubuntu.com/ubuntu/ trusty multiverse
        deb-src http://us.archive.ubuntu.com/ubuntu/ trusty multiverse
        deb http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
        deb-src http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
        

        然后运行这个:

        sudo apt-get update
        sudo apt-get install msttcorefonts
        

        【讨论】:

          猜你喜欢
          • 2020-02-26
          • 2011-03-31
          • 1970-01-01
          • 2012-07-09
          • 1970-01-01
          • 2019-04-10
          • 2012-06-08
          • 2011-08-17
          • 1970-01-01
          相关资源
          最近更新 更多