字体在Jasper Reports中对JVM不可用。

108

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

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

msttcorefonts已经被安装,但是我猜JVM没有使用它提供的任何字体。

我正在使用Ubuntu 10.04。

我该如何解决这个问题?


3
我实际上是在忽略它...只需设置以下内容 "net.sf.jasperreports.awt.ignore.missing.font=true"这是一个不好的想法...但可以解决问题一时... - Andrew
1
你在哪里设置这个?我正在使用嵌入式版本的JasperReports在jbilling中工作,没有jasperreports.properties文件可供编辑。 - Darragh
请参考以下链接:http://stackoverflow.com/questions/19978524/jasper-report-font-error - Jaichander
1
@Andrew,这似乎不是一个好的解决方案(我知道问题很旧),但也许我们最好避免报告的不一致性,我已经传达了答案。 - Petter Friberg
1
jasperreports-fonts-6.8.0 添加这个 jar 包对我有用。 - vdeshan
显示剩余2条评论
20个回答

3

2
这是一个不好的想法...导出不一致性! - Petter Friberg
1
@PetterFriberg 不,这是一个好的回退机制。你不能总是控制JVM。拥有一个回退机制总是一个好主意,即使结果不理想,也比因客户机上缺少字体而导致应用崩溃要好。 - jwenting
@jwenting 添加字体扩展,就不会崩溃了。相信我,如果你禁用它,那么你肯定做错了什么,生成的报告将是不正确的。你应该解决根本问题(缺少字体扩展)。是的,你总是可以控制JVM。 - Petter Friberg
@jwenting 注意:解决方案不是在服务器上安装字体(就像接受答案所说的那样,这是错误的!)。解决方案是生成并添加依赖关系字体扩展。请参见此处以获取正确的答案https://dev59.com/4G865IYBdhLWcg3wcOLG#35549391 - Petter Friberg
@PetterFriberg,这通常是不可能的。例如,我维护的应用程序运行在服务器上,但允许用户添加具有特定命名约定的自定义.jrxml文件,以生成超出我们提供的标准报告之外的自定义报告。如果服务器没有指定.jrxml所需的字体,则不希望这些报告崩溃,因此我们使用备用方案。 - jwenting
@jwenting,您觉得在字体扩展中添加一些标准字体并告知用户如果想确保正确的报表生成应该使用这些字体会不会更好呢?或者当添加jrxml时自动替换不正确的字体?导出不一致可能会很大,文本被截断,字母无法显示(取决于客户端PC),而且您将无法符合PDF/A标准等。此外,javascript中的eval函数可能很棒(让用户添加代码),但这是个好主意吗? - Petter Friberg

3
我遇到了一个问题,我的Web应用程序基于Spring 3,并部署在Oracle Linux 6上的Weblogic 10.3中。这个解决方案在链接中提到,但对我并没有起作用。
我不得不采取以下步骤- 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

2

你可以通过 iReport 并将其转换为 JAR 文件等方式来创建自定义字体。


1

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

1)在ireport desginer中安装字体

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

3)在操作系统上安装字体(可选)

4)将字体的所有.ttf粘贴到jre->lib->fonts目录中(否则,Web应用程序将抛出错误,JVM无法使用字体)


1

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
    

0

实际上,我用非常简单的方法解决了这个问题

  1. 进入您的主目录,例如/root
  2. 创建一个名为.fonts的文件夹
  3. 将您的所有字体文件复制到.fonts中,如果您使用的是Windows,则可以从C:\windows\fonts复制字体。
  4. sudo apt-get install fontconfig
  5. fc-cache –fv重新构建字体缓存。

-1
在你的.jrxml文件中添加以下内容:
<property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>

-1

-1
将您的字体复制到以下目录中 JDK_HOME\jre\lib\fonts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接