使用Jasper Reports的JVM无法使用Font

And*_*rew 82 jvm jasper-reports ubuntu-10.04 dynamic-jasper

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

net.sf.jasperreports.engine.util.JRFontNotFoundException:  
                                 Font 'Arial' is not available to the JVM.   
Run Code Online (Sandbox Code Playgroud)

安装了msttcorefonts,但我猜JVM没有使用它的任何字体.

我正在使用Ubuntu 10.04.

我怎样才能解决这个问题?

Bra*_*cha 60

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

sudo apt-get update
sudo apt-get install ttf-mscorefonts-installer
Run Code Online (Sandbox Code Playgroud)

我尝试在文件系统中搜索字体,其中包括:

ls /usr/share/fonts/truetype/msttcorefonts/
Run Code Online (Sandbox Code Playgroud)

这个文件夹只有自述文件,有关如何安装的正确说明.

cat /usr/share/fonts/truetype/msttcorefonts/README
Run Code Online (Sandbox Code Playgroud)

你需要一个互联网连接:

sudo apt-get install --reinstall ttf-mscorefonts-installer
Run Code Online (Sandbox Code Playgroud)

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

  • 其他Linux风味的FYI尝试sudo apt-get install msttcorefonts (4认同)
  • 这是在单台电脑上解决的方法,它不会解决任何编码问题,正确的方法是使用 font-extensions 我已经发布了答案 (2认同)

Pet*_*erg 28

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

Jasper报告试图帮助您进行报告开发,声明它无法正确导出报告,因为它找不到定义的TextFieldStaticText

<font fontName="Arial"/>
Run Code Online (Sandbox Code Playgroud)

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

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

正确的方法!

使用字体扩展!,如果你想创建自己的(见下面的链接),jasper报告还会发布一个默认的font-extension jar(jasperreports-fonts-x.x.x.jar),它支持fontName DejaVu Sans,DejaVu Serif以及DejaVu Sans Mono

<font fontName="DejaVu Sans"/>
Run Code Online (Sandbox Code Playgroud)

来自JasperReport终极指南:

我们强烈建议人们只使用从字体扩展派生的字体,因为这是确保在运行时执行报表时应用程序可以使用字体的唯一方法.使用系统字体时,如果部署在可能未安装这些字体的新计算机上,则始终会带来报告无法正常工作的风险

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

有关如何在pdf中正确呈现字体的清单

使用JasperSoft Studio生成字体扩展

使用iReport生成字体扩展名


小智 22

我使用IReport来安装字体:

工具 - >选项 - >字体 - >单击安装字体

然后选择字体并单击

- >导出为扩展名并输入名称myfont.jar

将此jar和spring.jar *添加到构建路径中.

*从Jaspersoft\iReport-3.7.0\ireport\modules\ext复制spring.jar


use*_*188 13

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

相反,我们根据此提示将字体与我们的应用程序捆绑在一起.他们的JAR文件捆绑了以下字体,

  • 宋体
  • 英语字体格式一种
  • 快递新
  • Comic Sans MS
  • 格鲁吉亚
  • 宋体
  • 等宽

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


小智 12

对于CentOS:

wget msttcorefonts

然后:

tar -zxvf msttcorefonts.tar.gz
cp msttcorefonts/*.ttf  /usr/share/fonts/TTF/
fc-cache -fv 
Run Code Online (Sandbox Code Playgroud)

毕竟,重启JVM.


May*_*ase 7

有三种方法可以避免这种问题.

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

JRProperties.setProperty("net.sf.jasperreports.awt.ignore.missing.font", "true");
Run Code Online (Sandbox Code Playgroud)

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

<property name="net.sf.jasperreports.awt.ignore.missing.font" value="true"/>
Run Code Online (Sandbox Code Playgroud)

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

JRProperties.setProperty("net.sf.jasperreports.default.font.name", "Sans Serif");
Run Code Online (Sandbox Code Playgroud)

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

<property name="net.sf.jasperreports.default.font.name" value="Sans Serif"/>
Run Code Online (Sandbox Code Playgroud)

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

首先通过选择"工具>>选项>>字体>>安装字体"在IReport中安装缺少的字体然后选择所有字体并通过单击"导出为扩展名"并使用.jar扩展名将其导出.

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


lkd*_*kdg 5

我只选择了“ SansSerif”或“ Serif”,而不是“ Arial”或“ Times New Roman”解决了这一问题。

  • 根据异常的说明文件(http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/util/JRFontNotFoundException.html),明确建议不要使用此方法。这可能会导致意外的渲染问题,因为这些字体可能会映射到不同系统上的不同系统字体。 (6认同)

Yas*_*ldi 5

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

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
    <version>6.8.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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

问候。