itext 生成PDF文档后,iphone显示乱码,我是这样解决的。

来源:互联网 发布:ubuntu 软件安装 编辑:程序博客网 时间:2024/05/21 15:32

使用itext工具类生成PDF文档后,在iphone上下载完预览,无论是英文、中文、数字,统统是乱码。但是其它不是由我的程序生成的但和我生成的PDF在一体上的(就是一部分是我生成的,另一部分是由程序拼接上去的)PDF在iphone上显示都是正常的。所以问题排除了文件编码的问题,也排除了苹果不支持中文的问题。那来再通过各种调试发现是字体库的问题。代码如下:


bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);    

就是前两个参数的问题!!!

第一个STSong-Light表示itext内部默认的中文字体库,其实就是itextAsian这个jar包下的一个properties文件名,即itext的jar包里自带的一个文件。第二个UniGB-UCS2-H是第一个参数指向的字库文件对应的横排字库。还有一个竖排的,把H换成V就是了,这里不讨论。

后来我在我自己本地机器上的字库里一个一个找对应的中文简体字体库,看哪一个可以在iphone里可以正常显示,就是一遍遍用不同的字体的打印PDF,然后放到iphone上看一下是不是显示正常。后来找到了一个各原来字体相近的华文宋体,然后把代码改成了如下这样:


bfChinese = BaseFont.createFont("C:\\windows\\fonts\\STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);


注意,这两个参数都换了。

C:\\windows\\fonts\\STSONG.TTF
上边这个就是我本机器上的字库目录
BaseFont.IDENTITY_H
上边这个就是itext对我本地那个字体库的支持配置。


后来发现不能这么干,因为我们的生产和测试环境都是在linux服务器上。我就把字库拷出来,然后放到我的工程目录里,把代码换成了:

bfChinese = BaseFont.createFont("com/utility/STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
就可以了。



0 0
原创粉丝点击