JasperReport是一个纯Java写的开源免费报表工具库,用于进行报表的设计
1.导入jasperreports依赖时,打印Cannot resolve com.lowagie:itext:2.1.7.js6异常
今天在使用Maven安装jasperreports依赖时,控制台始终打印Cannot resolve com.lowagie:itext:2.1.7.js6异常。具体依赖版本如下:
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.8.0</version>
</dependency>
解决办法
思路:
-
首先确定网络正常,再到 Maven 仓库 查看是否存在对应版本依赖。
-
如果以上都没问题,基本能确定自动下载不行,就手动下载安装吧。
以下通过itext演示手动安装
1、手动下载包到本地
使用JasperReports进行功能开发时会用到itext的jar包,但是这个jar是修改过的,一般为itext-2.1.7.js2.jar,itext-2.1.7.js6.jar等特殊版本,但是这些是maven仓库下载不到的。
本人在http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/ 目录下找到的相应的jar:
2.、安装 jar 包进本地仓库
安装命令: mvn install:install-file -Dfile=G:/itext-2.1.7.js6.jar -DgroupId=com.lowagie -DartifactId=itext -Dversion=2.1.7.js6 -Dpackaging=jar
参数说明:
- mvn install:install-file:安装文件
- -Dfile:待安装包所在位置
- -DgroupId:包的GroupId
- -DartifactId:包的artifactId
- -Dversion:包的version
- -Dpackaging:包的文件类型
运行效果如下:
安装成功后去本地仓库即可查看到刚才安装的 jar,回到项目刷新异常已消失。
注意:
错误想法,直接在本地建文件夹,让目录结构对应下载后的目录结构,再把包拖进去,不就和通过安装的效果一样了,还更加简单。想法很好,但 Maven 存在索引此操作并不行,因为我已经试过了
JasperReports依赖itext-2.1.7.js6.jar等下载
因 Cannot resolve com.lowagie:itext:2.1.7.js6,选择手动安装 Jar 包进 Maven 仓库
2.生成PDF中文不显示解决方法
JasperReport在用TIBCO Jaspersoft Studio进行报表设计的时候默认采用的字体是SansSerif,中文并不在其处理范围之内。
下面的报表jrxml模板文件中可看到已经设置了华文宋体。
<staticText>
<reportElement x="20" y="7" width="68" height="32" uuid="c0240cf1-84c7-4197-b32e-dc59cbb77c66"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font fontName="华文宋体" size="19"/>
</textElement>
<text><![CDATA[姓名]]></text>
</staticText>
报表模板文件中显示设置中文字体,生成PDF文件的时候中文其实还是不会显示,因为JasperRepeat的包中压根就没有华文宋体的字体库STSONG.TTF,需要在工程中放入该字体库,并配置JasperReport的字体模板fonts.xml,添加配置文件jasperreports_extension.properties指明字体处理工厂类和字体模板。
Windows操作系统中的字体文件可以在C:\Windows\Fonts目录下找到,华文宋体的字体文件STSONG.TTF就在该目录下面。
工程结构如下图:
fonts.xml
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="华文宋体">
<normal>fonts/STSONG.TTF</normal>
<bold>fonts/STSONG.TTF</bold>
<italic>fonts/STSONG.TTF</italic>
<boldItalic>fonts/STSONG.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>
</fontFamily>
</fontFamilies>
jasperreports_extension.properties
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts/fonts.xml
经过上述处理后,再生成PDF文件,中文已经可以正常显示了。