遇到 com.lowagie.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.

在利用iText.jar和iTextAsian.jar生成pdf文件时有时遇到了

Exception in thread "main" com.lowagie.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.

at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)
at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)
at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)
at timer.TestPdf.getPdf(TestPdf.java:34)

at timer.TestPdf.main(TestPdf.java:21)

这个错误。

经过查看iText-2.1.5.jar中的源码发现了在CJKFont.class中有这样两行代码

 

 InputStream inputstream = getResourceStream("com/lowagie/text/pdf/fonts/cjkfonts.properties");
            cjkFonts.load(inputstream);
            inputstream.close();
            inputstream = getResourceStream("com/lowagie/text/pdf/fonts/cjkencodings.properties");
            cjkEncodings.load(inputstream);
            inputstream.close();


这是通过iTextAsian.jar中的配置文件来取字符编码的,由于iText.jar版本的不同,目录文件做了改动,例如在iText-5.0.6.jar中变成了下面这样

 

 

InputStream is = getResourceStream("com/itextpdf/text/pdf/fonts/cjkfonts.properties");
            cjkFonts.load(is);
            is.close();
            is = getResourceStream("com/itextpdf/text/pdf/fonts/cjkencodings.properties");
            cjkEncodings.load(is);
            is.close();

 

 

所以我们只需要调整iTextAsian.jar的目录结构即可。也可以像我这样为了适应2个版本的iText.jar,我建了2个目录如下。

 

特别提醒:在向pdf表单写入中文时,如果用默认的表单可能会出现中文不显示的问题,建议将默认生成的删掉,自己手动添加上去,并把字体设置为“宋体”。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值