Fork me on GitHub

解决Font 'STSong-light' is not available to the JVM.

困扰两天的问题,今天得到解决.


由于公司早些时候的产品是ireport-1.x系列下开发的,现在ireport都出到5.x系列,产品要做升级,就把老的xml文件拿来,放到新的ireport中,预览出来发现报错,各种报错.


javax.servlet.ServletException: net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'STSong-light' is not available to the JVM. See the Javadoc for more details. org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535) org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

解决办法就是网上的那种各种修改配置文件,添加ireport的classPath的jar包,下载最新的itext-asian-5.2.0.jar,itextpdf-5.4.0.jar,jasperreports-3.7.5.jar,jasperreports-fonts-4.0.0.jar各种办法均有所尝试,还是不行!!!!!!!!!


然后wo就开始研究ireport它自己的实例,发现,当我把字体修改为STSong-light的时候,预览也咩有报错



,再看看xml文件,发现里面fontName标签,这样的话就出现了2个STSong-light,这不是坑爹么,前面的那个完全没有必要,删掉,统统删掉,后面的那个留着.



PDF文件只识别pdfFontName的标签才对,所以赶紧的批量删除fontName标签...然后预览,发现就ok了~!!!


 




顺便把我的lib下面的文件截图放上来,希望其他同志能够吸取本次教训.



jar包请去maven官网服务器上下载,http://search.maven.org/#search%7Cga%7C1%7Cjasperreports


另附 网上一个解决方案还算靠近的前辈写的文章,大家去参考下...总有一种方案能解决的,加油.


1.将iTextAsian.jar复制到iReport安装目录\ireport\libs下,运行iReport,工具-->选项-->iReport:Classpath中,将iTextAsian.jar包导入。

Jasperreport+iReport生成PDF字体问题
完成后,在属性里面设置 Pdf font name: STSong-Light; pdf Encoding =UniGB-UCS2-H;(Pdf Embedded复选框选不选上都一样),一般的中文字体就可以在pdf中正常显示了。注意:虽然在iReport3.7中,PDF font name和pdf Encoding两个属性已被声明过时(Deprecated),但实际上还是必须得设置正确,否则编译任然出错。

2.项目中还需要用到宋体之外的字体,即黑体和华文新魏(iReport中默认有这些字体,但却不能用于pdf中,在PDF Font name下就只有STSong-Light可用,而且加粗、斜体等效果在pdf中都无效),则做好上述设置之后,还需要在做如下设置:

 1)将要用的字体文件拷贝到 安装目录\ireport\fonts 中。

 2)工具-->选项-->iReport:Classpath中,将刚才的字体目录引入。

Jasperreport+iReport生成PDF字体问题

  3)工具-->选项-->iReport:Fonts中,将刚才的字体目录和包引入。Jasperreport+iReport生成PDF字体问题

  4)完成后,重启一下iReport,在文字属性中的Pdf font name中就可以看到相应的名字,选择字体后,设置Pdf Embedded打勾和Pdf Encoding为Identity-H(Unicode with horizontal writing),在iReport中预览(用Adobe pdf Reader预览)可以看到一切都OK了,iReport配置完毕。

3.用Jasperreport生成报表还有一个问题,项目找不到字体,会一直抛异常,解决方法如下:

 1)将刚才iReport中引入的fonts文件夹复制到项目的根目录下。

 2)右键点自己项目-Properties-Java Build Path,选Libraries选项卡,点Add Class Folder,选择刚才复制进来的fonts文件夹,点OK。

最重要的一点,别忘了先确保要安装的字体在本机上必须先安装,即把ttf字体文件拷贝到C:\Windows\Fonts目录下,保证文件名称都一致即可。

参考文章网址 http://blog.sina.com.cn/s/blog_707036b30100p5ub.html


今天下午从csdn上找到的将字体打包到jar包的办法,大家看下..


在使用Jasperreports以及iReport设计报表时,导出PDF是一个常见的需求。网上解决PDF导出中文显示问题相关的文章很多,无非就是设置控件的pdf font name和pdf encoding属性,但是在4.5中都已经被弃用了(不推荐)。并且原来的解决方案还存在两个问题:(1)预览的字体通常不是STSong-Light, 这会导致预览字体与导出到PDF不一致。(2)当字符串中既有字母又有汉字的时候,导出的PDF可能莫名的换行。本文就介绍一种完美的解决方案,既保持一致性,也不会出现换行问题。


     首先,安装完iReport之后,安装你想要使用的字体。Windows操作系统下面有各种字体,下面以仿宋的安装为例。在C:\Windows\Fonts文件夹下找到simfang.ttf仿宋字体文件。选择iReport菜单:工具->选项(英文应该为Tools->Options) ,在弹出的窗口中选择Fonts Tab。点击 Install Font按钮,选择刚才找到的仿宋字体文件simfang.ttf,点击下一步,选择pdf-encoding为Identity-H (Unicode with horizontal writing),勾选Embed in this font in the PDF document。 点击完成即可。此时应该可以在控件的font属性中看到宋体选项,选择宋体,即可预览,也可在iReport里面导出PDF。具体的截图如下:



    其次打包字体文件。要在具体的项目中运用刚才设置的字体,需要把字体文件以及Jasperreports配置文件打包为Jar包,并放到classpath中。切换到iReport的安装目录,选择fonts目录,命令行切换到该目录,执行命令: jar cf simfang.jar  *  。 打包的方式有很多 ,ant,maven等也都可以。把simfang.jar放到项目classpath下面即可。


     到此,完成了Jasperreports的个性化字体设置。控件的字体设置为仿宋即可,pdf相关的属性不用再设置。预览和PDF导出效果完全一致。

参考网址 : http://blog.csdn.net/kimylrong/article/details/7635407 

posted @ 2013-03-04 11:14  _落雨  阅读(596)  评论(1编辑  收藏  举报