Jasper stops finding one font

2019-01-17 22:15发布

After upgrading Jasper to the last version, it stopped finding one font: Symbol. The rest of the fonts seem to be fine. I have a bunch of ttfs in the same directory as where jasper is run, the program is just a small wrapper to generate PDFs, and it's throwing this error:

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>

The directory where the program is running:

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

All other fonts are found. Oh, in my laptop (macosx), it works fine, it only breaks on the server (Debian). I opened symbol.ttf and it opened fine on Mac OS X (just in case the file was corrupt).

Any ideas what may be going on?

6条回答
再贱就再见
2楼-- · 2019-01-17 22:38

The easy steps to solve this problem would be

  1. Open jasperreports-x.x.x.jar, in my case jasperreports-3.7.2.jar.
  2. Locate default.jasperreports.properties file and open it.
  3. Find the line net.sf.jasperreports.awt.ignore.missing.font=false and change value from false to true net.sf.jasperreports.awt.ignore.missing.font=true.
  4. Update the jar.
  5. Add to classpath of your project.

The problem is solved.

查看更多
来,给爷笑一个
3楼-- · 2019-01-17 22:50

On ubuntu I needed to uninstall the fonts and reinstall them:

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

Then, it works ok.

查看更多
乱世女痞
4楼-- · 2019-01-17 22:50

Update for year 2015:

Add this to (or uncomment in) /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

Then run this:

sudo apt-get update
sudo apt-get install msttcorefonts
查看更多
疯言疯语
5楼-- · 2019-01-17 22:53

I'm using JasperReports 6.3.1. I solved the problem by adding the following line in my .jrxml:

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

This way our report will look something different, depending on the fonts that are preinstalled in the system. In my case it does not represent a problem, and I'm not interested in adding an extra font in my project, since I need to be as light as possible.


In case you want to use the original fonts of the report in all runtime environments, an easy solution is to add the necessary dependencies to the project.

An example, for Maven:

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

You can also download the libraries and add them manually to the project, however it will work.


I hope you find them useful.

查看更多
贪生不怕死
6楼-- · 2019-01-17 22:54

Well the font must be installed in the OS where the report run.

查看更多
姐就是有狂的资本
7楼-- · 2019-01-17 22:58

Try adding the line

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

to your jasperreports.properties file.

查看更多
登录 后发表回答