iText中文处理

来源:互联网 发布:淘宝客qq群推广助手 编辑:程序博客网 时间:2024/05/22 03:26

下面说说这两天用iText解决的以及没解决的问题(我下载的是itext-5.1.0):

     

      1.错误信息:com.itextpdf.text.DocumentException: Font "STSongStd-Light" with "UniGB-UCS2-H" is not recognized。这是因为亚洲字体包没引入或引入了老版本的亚洲字体包(我当时就是从ireport中直接拿来这个包的,ireport用的是iText2.1.7,所以这个亚洲字体包是老版本的)。iText从5.0更改了包名,和以前的亚洲字体包不配套了。 去http://sourceforge.net/projects/itext/files/extrajars/下载extrajars-XX.zip,新的亚洲字体包就在这里面。请参照iText中的notice.txt文件。

 

          2 .用table.getDefaultCell()设置的属性,并没有实现预想的效果。这个问题就没搞定,最后逐一设置的cell的属性。

 

          3.大表格加入内存回收功能后,部分页面没有表头或多个表头。这个问题可就“神奇”了。首先,它居然把我不停地报内存溢出的问题搞定了(呵呵,这是它的功能所在,也是必须的);其次,居然有些页面没有表头。代码如下所示: int fregmentSize = 1017;// 定义每一段落的行数(用于释放内存) for (int i = 0; i < dataList.size(); i++) { if (i % fregmentSize == fregmentSize - 1) { document.add(table); table.deleteBodyRows(); table.setSkipFirstHeader(true); } ………… }

 

本来我定义的 fregmentSize 值是100,结果发现有些页面没有表头。这是因为清理table时正好达到页尾,即下一条数据需要在新的一页显示。这时table.setSkipFirstHeader(true)设置了表头不显示……悲剧了。可是如果设置显示表头table.setSkipFirstHeader(false),那么每次清理表格就会显示一次表头(pdf中就会一页中显示多个表头),显然更不合理。最后更改了fregmentSize 的值,以减少这样事情的发生。希望有解决这个问题的朋友能给留个解决方法。

 

 

 

 

 

 

 

 

      4.在学习中会有一些例子中遇到RtfWriter2、HtmlWriter就不要深研究了。因为这两东西从5.0已经从itext中独立出来了。我在网上好不容找到iText-rtf包,还是老版本的,没下载。sourceForge中有这个项目,但却没有提供jar,有个svn项目:

svn co https://itextrtf.svn.sourceforge.net/svnroot/itextrtf itextrtf 

这个项目使用iText2.1.8.jar编写的。仍与5以上的版本不配套(如HeaderFooter类5以上的版本已经取消,这个项目中仍在使用)。弄到这里我就不想在看这些包了,后面的HtmlWriter包就真的没看。

(HtmlWriter的东西在xmlworker-x.y.z.jar中,仍参照itext的notice.txt文件。例子:http://demo.itextsupport.com/xmlworker/doc.html)

 

下面是我学习时在网上收集的一些资料。整理一下,贴到下面。

百度文库(中文教程):http://wenku.baidu.com/view/dbafbbc66137ee06eff918a5.html

旧版本的demo:http://www.roseindia.net/java/itext/index.shtml

页头页脚demo:http://www.coderanch.com/how-to/java/ItextExample

转自:http://www.4ucode.com/Study/Topic/2022026