使用Jasper Reports的JVM无法使用Font

时间:2010-09-28 10:46:43

标签: jvm jasper-reports ubuntu-10.04 dynamic-jasper

我正在尝试使用DynamicJasper生成报告,但是我收到以下错误:

net.sf.jasperreports.engine.util.JRFontNotFoundException:  
                                 Font 'Arial' is not available to the JVM.   
安装了

msttcorefonts,但我猜JVM没有使用它的任何字体。

我正在使用Ubuntu 10.04。

我该如何解决这个问题?

19 个答案:

答案 0 :(得分:59)

我尝试安装mscorefonts,但是软件包已经安装并且是最新的。

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

我尝试在文件系统中搜索字体:

ls /usr/share/fonts/truetype/msttcorefonts/

此文件夹只有README,并提供有关如何安装的正确说明。

cat /usr/share/fonts/truetype/msttcorefonts/README

您需要互联网连接:

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

我重新安装了ttf-mscorefonts-installer(如上所示,确保接受EULA!)问题已解决。

答案 1 :(得分:25)

  

JasperReports引发 JRFontNotFoundException ,如果JVM无法使用报表模板中使用的字体作为系统字体或来自JR字体扩展名的字体。这可以确保避免因字体指标不匹配而导致的所有问题,并且我们会对不一致性发出预警。

Jasper报告正在尝试帮助您进行报告开发,声明无法正确导出报告,因为它找不到TextField或{{1}中定义的字体}

StaticText

是的,您可以通过将net.sf.jasperreports.awt.ignore.missing.font设置为false来停用,但您将导出不一致

是的,您可以安装字体作为JVM系统字体(但您需要在每台可能生成报告的PC上执行此操作,您仍然可以编码问题

正确的方法!

使用Font Extensions,如果您想创建自己的(请参阅下面的链接),jasper报告还会分发一个默认的字体扩展名jar(<font fontName="Arial"/> ),支持fontName jasperreports-fonts-x.x.x.jarDejaVu SansDejaVu Serif

DejaVu Sans Mono

来自JasperReport终极指南:

  

我们强烈建议人们只使用从字体派生的字体   扩展,因为这是确保字体的唯一方法   将在执行报告时提供给应用程序   运行。使用系统字体总是会带来报告的风险   在可能没有的新计算机上部署时正常工作   安装了那些字体

StackOverflow上有关如何在pdf中正确呈现字体的链接

Checklist on how to render font correctly in pdf

Generate font-extensions with JasperSoft Studio

Generate font-extensions with iReport

答案 2 :(得分:21)

我使用IReport安装字体:

  

工具 - &gt;选项 - &gt;字体 - &gt;点击安装字体

然后选择字体并单击

  

- &GT;导出为扩展名和类型名称myfont.jar

将此jar以及spring.jar * 添加到您的构建路径。

*从Jaspersoft \ iReport-3.7.0 \ ireport \ modules \ ext

复制spring.jar

答案 3 :(得分:12)

对于CentOS:

wget msttcorefonts

然后:

tar -zxvf msttcorefonts.tar.gz
cp msttcorefonts/*.ttf  /usr/share/fonts/TTF/
fc-cache -fv 

毕竟,重新启动JVM。

答案 4 :(得分:11)

sudo apt-get install msttcorefonts有效(在我们的Ubuntu开发环境中),但不是一个很好的解决方案。

相反,我们基于this tip将字体与我们的应用程序捆绑在一起。他们的JAR文件捆绑了以下字体,

  • Arial字体
  • Times New Roman
  • Courier New
  • Comic Sans MS
  • 佐治亚
  • 宋体
  • 等宽

直接链接下载jar: Maven ver 1.0. DynamicFonts

答案 5 :(得分:7)

有三种方法可以避免这样的问题。

方法1:通过设置忽略缺少的字体属性。

JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");

或者您可以通过在.jrxml文件中输入以下行来设置此属性。

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

方法2:通过设置默认字体属性。

JRProperties.setProperty("net.sf.jasperreports.default.font.name", "Sans Serif");

或者您可以通过在.jrxml文件中输入以下行来设置此属性。

<property name="net.sf.jasperreports.default.font.name" value="Sans Serif"/>

方法3:添加缺少的字体属性。

首先通过选择&#34;在IReport中安装缺少的字体。工具&gt;&gt;选项&gt;&gt;字体&gt;&gt;安装字体&#34;然后选择所有字体并通过单击&#34;导出为扩展名&#34;与.jar扩展。

您可以将此jar用于Jasperreports-font.X.X.X.jar,它将出现在您的项目库或类路径中。

答案 6 :(得分:4)

我通过选择'SansSerif'或'Serif'而不是'Arial'或'Times New Roman'来解决这个问题。

答案 7 :(得分:3)

尝试添加行

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

到你的jasperreports.properties文件。

Jasper stops finding one font

答案 8 :(得分:2)

可以通过iReport制作自定义字体并转换为jars文件

答案 9 :(得分:2)

我遇到了基于Spring 3的Web应用程序的问题,并部署在Oracle Linux 6上的Weblogic 10.3上。link中提到的解决方案对我不起作用。

我必须采取以下步骤 -  1.将Arial * .ttf字体文件复制到JROCKIT_JAVA_HOME / jre / lib / fonts目录  2.在fontconfig.properties.src中输入字体  3.从Weblogic控制台重新启动集群

filename.Arial=Arial.ttf
filename.Arial_Bold=Arial_Bold.ttf
filename.Arial_Italic=Arial_Italic.ttf
filename.Arial_Bold_Italic=Arial_Bold_Italic.ttf

答案 10 :(得分:2)

您可以通过安装字体来实现,这意味着您想要运行该特定应用程序。最简单的方法就是将这个bl行添加到你的jrxml文件中:

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

希望它有所帮助。

答案 11 :(得分:1)

对于Debian

添加

non-free contrib

到/etc/apt/sources.list中的deb和deb-src即:

deb http://ftp.debian.org/debian/ squeeze main non-free contrib
deb-src http://ftp.debian.org/debian/ squeeze main non-free contrib

然后

apt-get update
apt-get install msttcorefonts

当然你需要重启jasperserver。即:

/opt/jasperreports-server-cp-4.5.0/ctlscript.sh restart

更改您的版本/路径。

答案 12 :(得分:1)

以多种语言创建jasper报告(Unicode)

1)在ireport desginer中安装字体

2)创建字体扩展(我们将在应用程序类路径中使用它)

3)在os上安装字体(可选)

4)在jre-&gt; lib-&gt; fonts目录中粘贴所有.ttf字体(否则Web应用程序将抛出错误字体不可用于JVM)

答案 13 :(得分:0)

实际上我以一种非常简单的方式解决了这个问题

  1. 转到 home path ,例如/root
  2. 创建名为 .fonts
  3. 的文件夹
  4. 将您的all your font files复制到.fonts,如果您使用的是Windows,则可以从C:\windows\fonts复制字体。
  5. sudo apt-get install fontconfig
  6. fc-cache –fv重建字体缓存。

答案 14 :(得分:0)

将您的字体复制到以下目录中 JDK_HOME \ JRE \ lib中\字体

答案 15 :(得分:0)

分两步解决(如果您使用的是centOS)

  1. 下载Microsoft核心字体rpm包。

    [root@WEBSVR~/]# wget http://www.itzgeek.com/msttcore-fonts-2.0-3.noarch.rpm
    
  2. 安装rpm包。

    [root@WEBSVR~/]# rpm -Uvh msttcore-fonts-2.0-3.noarch.rpm
    

答案 16 :(得分:0)

在查看Windows上生成的文档时遇到问题?

您可以轻松尝试一个好的解决方案:

  

yum install curl cabextract xorg-x11-font-utils fontconfig

     

rpm -i   https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm

在此之后我需要重新启动我的系统CentOS6。

来源:http://mscorefonts2.sourceforge.net/

答案 17 :(得分:0)

如果您在项目中使用Maven,则只需将jasper-fonts依赖项添加到pom.xml:

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

在系统上安装缺少的字体可能是一个可行的解决方案,但对我而言不是,我不想在每次部署后都在新服务器上安装缺少的字体,而是选择将字体嵌入到应用程序中

致谢。

答案 18 :(得分:0)

您可以使用这个库将 Liberation-fonts 打包为 JasperReport 字体扩展,并将它们注册为 Arial、Times New Roman 和 Courier:

https://mvnrepository.com/artifact/com.mpobjects.jasperreports.font/jasperreports-fonts-liberation