利用itext进行html转pdf

来源:互联网 发布:梁朝伟刘嘉玲 知乎 编辑:程序博客网 时间:2024/06/05 12:39

之前利用itext进行html转pdf,实际使用中还是有些地方确实需要注意的,我所遇到的归纳以下几个问题:

1,中文的支持

2,html格式要求严格

3,pdf里面文字换行问题


第一个中文支持呢,我看就通过:

[java] view plaincopyprint?
  1. ITextRenderer renderer = new ITextRenderer();   
  2.        ITextFontResolver font = renderer.getFontResolver();  
  3. font.addFont("C:/WINDOWS/Fonts/simsun.ttc",   
  4.                    BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);  

就差不多了,其实有个疑问的,就一种字体?多添加几种字体都不行

这样加了还不行的,html文档里面还就只能设定这个字体,设了其他字体就不行了,这个比较郁闷。

这就还正好牵到第二个问题,html格式非常非常严格,有丁点的不对的地儿就报错,这个更郁闷。

[html] view plaincopyprint?
  1. <?xmlversion="1.0"encoding="UTF-8"?> 
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  3. <htmlxmlns="http://www.w3.org/1999/xhtml"> 
  4. <head> 
  5. <style> 
  6. body{ 
  7. font-family:SimSun; 
  8. font-size:14px; 
  9. </style> 
  10. <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"></meta> 

贴出我html一段代码,下面拼下head,body就ok,注意一定要配对,这个html最上面还多了个xml定义,开始是遇到html.version错,一直没找到原因,就google了下,有用的消息不是很多,因为有的人不需要这个也没关系,但是我这就是错,查了官网,看到demo上面多了个xml定义,才copy过来看看,还真是这样的错,又一个郁闷的地儿。

至于第三个问题,哎呀妈呀,愣是被折磨了两天,想尽各种办法,没辙。。。。

google,baidu都没找到合理的解释,大家很少遇到这个原因,我想因为,大多数生成pdf应该是基于模板生成什么报表之类的,都是出来个表格之类的,没遇到输出大量文字信息,就比如下面一段html:

[html] view plaincopyprint?
  1. <body> 
  2. <table style="margin-top: 120px;table-layout:fixed; word-break:break-strict;"> 
  3.     <tbody> 
  4.         <tr> 
  5.             <td> 
  6.              <b>新华社中国网事:【莫言:诺贝尔奖金将用来买房】巨额奖金怎么用?</b><br/>刚刚获得诺贝尔文学奖的莫言在接受新华社中国网事记者专访时笑着说:“我准备在北京买套房子,大房子,后来有人提醒我说也买不了多大的房子,5万多一平米,750万也就是120多平米。” 
  7.             </td> 
  8.         </tr> 
  9.     </tbody> 
  10. </table> 
  11. </body> 

body中有个table,就一行文字,但是呢,一行非常长的文字,没有换行,这样输出的pdf就会把表格撑开,一行显示,pdf就显示不全这些文字,就是这个问题,把我搞死了,还好不断的摸索,尝试,google,终于网上有哥们给出解决办法,给出链接:【他解决问题还是蛮多的,顶起http://blog.csdn.net/shanliangliuxing/article/details/6833471】原来是itext源码问题,完全忽略咱强大的china的存在,他源码换行是按照空格换行,老外嘛,单词之间空格表示,咱中文不行啊,所以果断修改源码,感谢哥们提供下载,我试过了,没有问题的

这样用需要有CSS配合,上面table中

[html] view plaincopyprint?
  1. table-layout:fixed; word-break:break-strict; 
要加上。

原创粉丝点击