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

简介: 困扰两天的问题,今天得到解决. 由于公司早些时候的产品是ireport-1.x系列下开发的,现在ireport都出到5.x系列,产品要做升级,就把老的xml文件拿来,放到新的ireport中,预览出来发现报错,各种报错.

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


由于公司早些时候的产品是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的时候,预览也咩有报错

img_fc12bd9ab0531b27928b0133c8e2d649.jpg



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


img_520875fc85f6133ed77bf7db71b6dbcd.jpg


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


 

img_9ba359f522404cc23faa03affdeb7ff2.jpg



img_a453fabe95e561ca2c1e795e679a1543.jpg


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


img_fd855e8b40bcaae0cee5bcc3d79d844c.jpg


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


img_702606a04e2b65f8b5ac182d986c6914.jpg

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


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。具体的截图如下:

img_02ea59236f0077719f647025c99ba3b8.jpgimg_e63822f81f652f7d998c44a3da5c0d7b.jpgimg_18decb965cb36b7e3dd62ecd7eea8e3c.jpg


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

img_218c327fc934a5c0e6966e76ed7d1f8e.jpgimg_49f923181ecaa9923669374f5451953f.jpg


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

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

目录
相关文章
|
25天前
Px,em,rem的区别
【10月更文挑战第10天】 Px,em,rem的区别
48 2
|
3月前
|
缓存 前端开发 Linux
如何使用 @font-face 和 font-display 在 CSS 中定义自定义字体
如何使用 @font-face 和 font-display 在 CSS 中定义自定义字体
79 0
|
6月前
|
前端开发
字体浓淡[font-weight]
字体浓淡[font-weight]。
30 2
|
6月前
|
前端开发
前景色[color]
前景色[color]。
36 0
COLOR
COLOR
113 0
|
Java 索引
JDK:Font.canDisplay()是如何生效的
JDK:Font.canDisplay()是如何生效的
105 0
|
前端开发
每日一学—CSS overflow与text-overflow与white-space属性
CSS overflow 属性可以控制内容溢出元素框时在对应的元素区间内添加滚动条。text-overflow 属性指定当文本溢出包含它的元素时,应该如何显示。可以设置溢出后,文本被剪切、显示省略号 (...) 或显示自定义字符串(不是所有浏览器都支持)。white-space属性指定元素内的空白怎样处理。
293 0
每日一学—CSS overflow与text-overflow与white-space属性
Mysterious Light——AT
题目描述 Snuke is conducting an optical experiment using mirrors and his new invention, the rifle of Mysterious Light. Three mirrors of length N are set so that they form an equilateral triangle. Let the vertices of the triangle be a,b and c.
126 0
Mysterious Light——AT
关于 QWidget无法使用stylesheet设置自身backgound-color(背景色)和border-image(背景图片) 的解决方法
关于 QWidget无法使用stylesheet设置自身backgound-color(背景色)和border-image(背景图片) 的解决方法
关于 QWidget无法使用stylesheet设置自身backgound-color(背景色)和border-image(背景图片) 的解决方法