我正在尝试使用DynamicJasper生成报告,但出现以下错误:
net.sf.jasperreports.engine.util.JRFontNotFoundException:
Font 'Arial' is not available to the JVM.
msttcorefonts已安装,但是我想JVM没有使用它的任何字体。
我正在使用Ubuntu 10.04。
我怎样才能解决这个问题?
我正在尝试使用DynamicJasper生成报告,但出现以下错误:
net.sf.jasperreports.engine.util.JRFontNotFoundException:
Font 'Arial' is not available to the JVM.
msttcorefonts已安装,但是我想JVM没有使用它的任何字体。
我正在使用Ubuntu 10.04。
我怎样才能解决这个问题?
Answers:
我尝试安装mscorefonts,但是该软件包已安装且是最新的。
sudo apt-get update
sudo apt-get install ttf-mscorefonts-installer
我尝试使用以下方法在文件系统中搜索字体:
ls /usr/share/fonts/truetype/msttcorefonts/
该文件夹仅包含自述文件,以及有关如何安装的正确说明。
cat /usr/share/fonts/truetype/msttcorefonts/README
您需要为此连接互联网:
sudo apt-get install --reinstall ttf-mscorefonts-installer
我重新安装ttf-mscorefonts-installer
(如上所述,确保接受EULA!),问题已解决。
如果报表模板中使用的字体无法作为JVM的系统字体或来自JR字体扩展名的字体供JVM使用,则JasperReports会引发JRFontNotFoundException。这样可以确保避免由字体规格不匹配引起的所有问题,并且我们会提前发出有关不一致的警告。
Jasper报表试图帮助您进行报表开发,指出由于找不到在TextField
或中定义的字体,因此无法正确导出报表。StaticText
<font fontName="Arial"/>
是的,您可以通过将net.sf.jasperreports.awt.ignore.missing.font设置为true来禁用此功能,但是会出现导出不一致的情况。
是的,您可以将字体安装为JVM系统字体(但是您需要在使用的每台PC上进行安装,这可能会生成报告,并且仍然会出现编码问题)。
使用字体扩展!,如果你想创建自己的(见下面的链接),碧玉报告还经销默认字体扩展罐子(jasperreports-fonts-x.x.x.jar
),支持的fontName DejaVu Sans
,DejaVu Serif
和DejaVu Sans Mono
<font fontName="DejaVu Sans"/>
从JasperReport Ultimate Guide:
我们强烈建议人们仅使用从字体扩展名衍生的字体,因为这是确保在运行时执行报告时,字体对于应用程序可用的唯一方法。使用系统字体通常会带来以下风险:将报告部署到可能未安装这些字体的新计算机上时,报告无法正常工作
关于如何在pdf中正确呈现字体的StackOverflow上的链接
我使用IReport安装字体:
工具->选项->字体->单击安装字体
然后选择字体并单击
->导出为扩展名并输入名称myfont.jar
将这个jar和spring.jar *添加到您的构建路径。
*从Jaspersoft \ iReport-3.7.0 \ ireport \ modules \ ext复制spring.jar
sudo apt-get install msttcorefonts
可以工作(在我们的Ubuntu开发环境中),但这不是一个很好的解决方案。
相反,我们根据此技巧将字体与我们的应用程序捆绑在一起。他们的JAR文件捆绑了以下字体,
直接链接下载jar: Maven版本1.0。动态字体
对于CentOS:
wget msttcorefonts
然后:
tar -zxvf msttcorefonts.tar.gz
cp msttcorefonts/*.ttf /usr/share/fonts/TTF/
fc-cache -fv
毕竟,重新启动JVM。
有三种方法可以避免这种问题。
方法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:添加缺少的字体属性。
首先,通过选择“工具>>选项>>字体>>安装字体”在IReport中安装缺少的字体,然后选择所有字体并通过单击带有.jar扩展名的“导出为扩展名”将其导出。
您可以将此Jar用于Jasperreports-font.XXXjar,它将存在于您的项目库或类路径中。
我通过仅选择“ SansSerif”或“ Serif”而不是“ Arial”或“ Times New Roman”解决了这一问题。
尝试添加线
net.sf.jasperreports.awt.ignore.missing.font = true
到您的jasperreports.properties文件。
加
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
更改您的版本/路径。
我遇到了基于Spring 3并部署在Oracle Linux 6上的Weblogic 10.3上的Web应用程序的问题。链接上提到的解决方案对我不起作用。
我必须执行以下步骤-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
分两步解决(如果您使用的是centOS)
下载Microsoft核心字体rpm软件包。
[root@WEBSVR~/]# wget http://www.itzgeek.com/msttcore-fonts-2.0-3.noarch.rpm
安装rpm软件包。
[root@WEBSVR~/]# rpm -Uvh msttcore-fonts-2.0-3.noarch.rpm
将您的字体复制到以下目录JDK_HOME \ jre \ lib \ fonts
嘿在查看Windows上生成的文档时遇到麻烦吗?
您可以轻松尝试一个好的解决方案:
yum install curl cabextract xorg-x11-font-utils fontconfig
之后,我需要重启系统CentOS6。