`
Everyday都不同
  • 浏览: 725000 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

Linux环境下部署jasperreport出现net.sf.jasperreports.engine.util.JRFontNotFoundException

阅读更多

如题所示的错误完整语句如下:

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

这是一个很闹心的问题,你会发现你在windows环境开发,报表显示的好好的,但是开开心心部署到lInux环境时,可能就会给你泼如题所示的冷水。

要解决这个问题要从2方面考虑:

 

1)Linux在没有安装报表所需中文字体的情况:

第一步:安装方法——转到Linux环境下的/usr/share/fonts路径下,新建一个dir如zh_CN,把准备好的中文字体传到该目录下(中文字体的获取可以从windows环境的C:/Windows/Fonts下拷贝~),再执行如下命令:

mkfontscale
mkfontdir 
fc-cache -fv 

 即可成功安装字体。可以执行命令:

fc-list

 查看是否安装好字体。

第二步:(很重要!!)在项目的classes目录下加一个jasperreports.properties配置文件,添加内容如下:

 

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

再重启项目即可~~

(以上方法亲测有效)

 

2)考虑到可移植性,把字体打包成jar放在项目里面。

这种方法我尝试了并没有起作用,可能是因为之前我已成功在Linux里安装好了中文字体的原因?但是我觉得也是一个比较靠谱的办法,所以记录下,可能以后用得着呢。。

前往官方社区下载jasperreports-6.2.0的完整版项目,解压后里面会有很多demo,找到fonts这个项目:

<%=你的jasperreport目录%>/demo/fonts.。

再转到net\sf\jasperreports\fonts\dejavu目录,把里面自带的字体删除,换上你自己的中文字体如STFANGSO.TTF(仿宋),然后修改net\sf\jasperreports\fonts下面的fonts.xml,这里以仿宋为例吧:

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
	<fontFamily name="仿宋">
		<normal>net/sf/jasperreports/fonts/dejavu/STFANGSO.TTF</normal>
		<bold>net/sf/jasperreports/fonts/dejavu/STFANGSO.TTF</bold>
		<italic>net/sf/jasperreports/fonts/dejavu/STFANGSO.TTF</italic>
		<boldItalic>net/sf/jasperreports/fonts/dejavu/STFANGSO.TTF</boldItalic>
		<pdfEncoding>Identity-H</pdfEncoding>
		<pdfEmbedded>true</pdfEmbedded>
		<exportFonts>
			<export key="net.sf.jasperreports.html">'仿宋', Arial, Helvetica, sans-serif</export>
			<export key="net.sf.jasperreports.xhtml">'仿宋', Arial, Helvetica, sans-serif</export>
		</exportFonts>
		<!--
		<locales>
			<locale>en_US</locale>
			<locale>de_DE</locale>
		</locales>
		-->
	</fontFamily>
</fontFamilies>

 好了,现在开始着手把修改后的字体项目打成jar包:

 在dos窗口转至:jasperreports-6.2.0\demo\fonts,执行如下命令:

jar cvf fonts.jar *

 fonts.jar即是你封装好的字体jar,可以反编译查看其大致结构:



 然后把这个jar包放到classpath下,同时也别忘了在classes目录下加上一个如1)情况所讲的配置文件。

【注:这种方法我目前还没有测通,可能是因为已经在Linux安装好字体的原因~】

 

3)其他方法

参考于网络但大多数都没测通,可能情况不同采取的方法不同。

  • 大小: 4.5 KB
分享到:
评论

相关推荐

    jasperreport maven打包后找不到字体解决方案

    jasperreport 用maven打包后找不到字体解决方案 net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font

    使用jasperReport实现动态表头.pdf

    import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.design.JRDesignBand; import net.sf.jasperreports.engine.design.JRDesignStaticText; import ...

    Jasper_Report用户手册

    Class net.sf.jasper.engine.util.JRLoader 3 主要的任务和过程 3.1 XML解析 3.2 编译报表设计(Report Designs) 3.3 Report Design 预览 3.4报表装填(Filling Report) 3.5 查看报表(Viewing Reports) 3.6 打印...

    jasperreports-javaflow-6.3.0.7z_JASPERREPORT_源码.zip

    在源码中,JavaFlow的相关实现主要集中在`net.sf.jasperreports.engine.fill.JRFillSubreportRunner`和`net.sf.jasperreports.engine.fill.JRJavaFlowExecutor`类中。`JRFillSubreportRunner`负责子报表的填充,而`...

    ireport导出excel 部分源码

    import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import net.sf.jasperreports.engine.export.JRXlsExporter; ``` #### 使用JasperHelper...

    jasperreport5.5.0

    解决jasperreport在linux系统无法正常显示宋体的问题。...java报表抛出net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '宋体' is not available to the JVM. See the Javadoc for more details.

    Ireport导出excel的Java代码

    - `net.sf.jasperreports.engine.util.JRLoader`: 加载 IReport 对象。 - `org.apache.struts2.ServletActionContext`: 获取请求和响应对象。 - `dao.DBUtil`: 数据库连接工具类。 #### 2. 导出 Excel 的方法 ```...

    JasperReport+iReport 所需jar包

    4. `net.sf.jasperreports.engine.export-x.x.x.jar`,`net.sf.jasperreports.engine.util-x.x.x.jar`等:JasperReport的扩展库,用于特定的报表处理和输出功能。 **安装和配置** 1. 将上述jar包添加到项目的类...

    ireport+jsp

    &lt;%@page import="net.sf.jasperreports.engine.export.JRHtmlExporterParameter, net.sf.jasperreports.engine.JRExporter, net.sf.jasperreports.engine.export.JRHtmlExporter, ...

    web打印.doc

    import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import net.sf.jasperreports.view.JRViewer; import java.util.HashMap; import java.util.Map; public class PrintServlet extends ...

    jasperReport资料文档5

    除了传统的数据库连接之外,JasperReports还支持多种其他数据源,如空数据源、Java对象、`java.util.Map`、`TableModel`、XML、CSV文件以及自定义数据源等。通过这些数据源,用户可以在没有数据库连接的情况下设计和...

    javaPdfDemo.rar

    import net.sf.jasperreports.engine.JasperReport; import java.io.InputStream; import java.util.HashMap; import java.util.Map; public class JasperReportExample { public static void main(String[] args...

    Jasperreport导出PDF

    import net.sf.jasperreports.engine.*; import java.io.File; import java.util.HashMap; import java.util.Map; public class JasperPDFExport { public static void main(String[] args) { try { // 加载...

    Jasper Report用户手册(1.0)中文版

    17. **`net.sf.jasper.engine.util.JRLoader`** - **作用**:提供了加载报表资源的功能。 - **方法**:`loadObject(String fileName)`用于从文件加载报表对象。 #### 三、主要任务和过程 1. **XML解析** - 解析...

Global site tag (gtag.js) - Google Analytics