java中jasperReport中文乱码

jasperReport 专栏收录该内容
2 篇文章 0 订阅

         jasperReport在java中,生成pdf时,出现中文乱码,郁闷啊。。。。。。肿么办??????

        1、jasperReport在ireport设计器上,对每个有中文的组件的属性进行如下设置

      

      

   

       2、把iTextAsian.jar和iTextAsianCmaps.jar引入到ireport的classpath中,我这篇文章讲过

           引入以后,设计器预览不会乱码了,看到可爱的汉字出现在了我们的pdf文件


      3、将编译好的japser文件拷贝到java工程中,程序运行看看报表结果,这坑爹了,报错了,错误信息如下:

net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font :
pdfFontName   : STSong-Light
pdfEncoding   : UniGB-UCS2-H(Chinese Siplified)

isPdfEmbedded : true

    跟踪错误信息,查看异常轨迹,在源码中发现,生成pdf时,字符集编码获取如下:

   a、从jasperReport上下文获取字符集:

      这些字符是从哪里来呢?一个是当前运行的操作系统自身的字符集,一个jasperReport自己提供字符集,jasperReport提供的字符集,那是相当的少,差不多就算是个例子吧,就只有一个Pictonic字符集:

 

      jasperReport提供的字符集没有,操作系统又没有,怎么办?自己遵循java的规则,造一个字符集?感觉好麻烦,我们遇到的别人,也一定会遇到,重复造轮子,是一个莫大的浪费,继续看源码;

     从jasperReport上下文找不到,从操作系统也找不到了,就靠第三方了,在接下来查找字符集的代码中,我们看到如下的代码:

        从第三方,itext中(com.lowagie.text.FontFactory)获取,视乎有线希望。。。。结果com.lowagie.text.FontFactory返回的虽然不为空,可是baseFont为空,一样,没有查到字符集,尼玛。。。。什么情况?

        继续往下,大师就是大师,任性的继续寻找字符集,这次是从资源池中寻找字符集文件:


       这里,还是失败,没有找到任何资源,可爱的异常信息打出来了,异常就是上图的Could not load the following font:.....

      静下来再想想,既然文件中,第三方也没有找到,会不会是第三方的资源文件缺少导致的?

      往下看以后,发现,itext的字符集包没有提供,正好,itext的字符集包由iTextAsian-2.1.jar,iTextAsianCmaps-2.1.jar两个包提供,打开iTextAsian-2.1.jar,我们看到熟悉的字符集名称:

      


        爽哉,原来你在这里,把包导入工程,网上查了一遍。。。。悲剧。。。。没有找到相应的maven仓库,好吧,那就自己放到公司的maven仓库好了,马不停跌的放入公司maven仓库以后,引入项目,启动程序,ok,一切大吉,可爱的中文在pdf中出现了。


       注:如果不是maven项目,自己下载包,引入相应的仓库或者项目中即可

  

      至此,坑爹的中文显示异常及报错就搞定了。





       






  • 1
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

lgh1117

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值