"Arial字体对JVM不可用"

7

我正在处理一个使用Jasperreports的Java项目。在之前的其他项目中,我多次使用了相同的技术,但在Unix环境中打印报告时总是遇到同样的问题。

我的项目使用:

  • JBoss 4.2.3.GA
  • Java 1.6
  • Jasperreports 4.7.0

出现的异常为:

net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'Arial' is not available to the JVM. See the Javadoc for more details.

我找到了一个通用的解决方案来解决这个问题,它确实有效:
sudo apt-get install msttcorefonts

然而,我想了解Jasper如何使用字体,以及它如何搜索安装在Unix环境中的这些字体。也许一个更好的问题是:JVM如何处理本地字体?有人可以给我详细解释一下这个主题吗?系统字体如何在运行时对JVM可用?


2
你应该阅读有关字体扩展机制的内容。您还可以在JasperReports终极指南中找到更多详细信息。为了更好地理解,您可以查看JR引擎的源文件。 - Alex K
JVM文档中有这方面的任何资料吗? - gdfbarbosa
我发现这个链接很有趣,它解释了JVM如何使用字体: http://docs.oracle.com/javase/6/docs/technotes/guides/intl/font.html。 我认为这就是我正在寻找的信息。 - gdfbarbosa
1
@AlexK 我和 OP 有同样的问题,我使用 JasperReports 字体扩展,因此我的字体文件在应用程序的 jar 包中。我不明白为什么 JVM 找不到它们。在许多帖子中,人们建议在操作系统中安装字体,但这会破坏字体扩展的目的。 - Gustavo
@barbosa 你是否正在使用JasperReports字体扩展? - Gustavo
6个回答

4

2

如果你不想下载各种jar包等文件,只需前往软件中心并点击安装Ubuntu受限制额外组件。该软件包将安装不仅是微软字体而且其他支持有受版权限制的应用程序所需的软件。

此方法适用于 Ubuntu 系统。


0

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

0

0

针对OpenSuse

验证字体是否在SO上不可用 fc-list | grep "Arial"

安装以下rpm包 sudo rpm -ivh msttcore-fonts-2.0-3.noarch.rpm

或从页面下载:

http://www.mjmwired.net/resources/mjm-fedora-f11.html#ttf

安装rpm包

再次验证 fc-list | grep "Arial"

重启您的应用服务器


0

我也在Jasper 5.0上遇到了同样的问题。我按照以下步骤进行:

  1. 放置jasper-fonts.jar
  2. 在Linux上安装缺少的字体;
  3. 重新启动JBoss服务器。

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