利用itext进行html转pdf
2012-12-25 15:26
465 查看
之前利用itext进行html转pdf,实际使用中还是有些地方确实需要注意的,我所遇到的归纳以下几个问题:
1,中文的支持
2,html格式要求严格
3,pdf里面文字换行问题
第一个中文支持呢,我看就通过:
[java]
view plaincopyprint?
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver font = renderer.getFontResolver();
font.addFont("C:/WINDOWS/Fonts/simsun.ttc",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
就差不多了,其实有个疑问的,就一种字体?多添加几种字体都不行
这样加了还不行的,html文档里面还就只能设定这个字体,设了其他字体就不行了,这个比较郁闷。
这就还正好牵到第二个问题,html格式非常非常严格,有丁点的不对的地儿就报错,这个更郁闷。
[html]
view plaincopyprint?
<?xml
version="1.0"
encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<style>
body{
font-family:SimSun;
font-size:14px;
}
</style>
<meta
http-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?
<body>
<table
style="margin-top: 120px;table-layout:fixed; word-break:break-strict;">
<tbody>
<tr>
<td>
<b>新华社中国网事:【莫言:诺贝尔奖金将用来买房】巨额奖金怎么用?</b><br/>刚刚获得诺贝尔文学奖的莫言在接受新华社中国网事记者专访时笑着说:“我准备在北京买套房子,大房子,后来有人提醒我说也买不了多大的房子,5万多一平米,750万也就是120多平米。”
</td>
</tr>
</tbody>
</table>
</body>
body中有个table,就一行文字,但是呢,一行非常长的文字,没有换行,这样输出的pdf就会把表格撑开,一行显示,pdf就显示不全这些文字,就是这个问题,把我搞死了,还好不断的摸索,尝试,google,终于网上有哥们给出解决办法,给出链接:【他解决问题还是蛮多的,顶起http://blog.csdn.net/shanliangliuxing/article/details/6833471】原来是itext源码问题,完全忽略咱强大的china的存在,他源码换行是按照空格换行,老外嘛,单词之间空格表示,咱中文不行啊,所以果断修改源码,感谢哥们提供下载,我试过了,没有问题的
这样用需要有CSS配合,上面table中
[html]
view plaincopyprint?
table-layout:fixed; word-break:break-strict;
1,中文的支持
2,html格式要求严格
3,pdf里面文字换行问题
第一个中文支持呢,我看就通过:
[java]
view plaincopyprint?
ITextRenderer renderer = new ITextRenderer();
ITextFontResolver font = renderer.getFontResolver();
font.addFont("C:/WINDOWS/Fonts/simsun.ttc",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
ITextRenderer renderer = new ITextRenderer(); ITextFontResolver font = renderer.getFontResolver(); font.addFont("C:/WINDOWS/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
就差不多了,其实有个疑问的,就一种字体?多添加几种字体都不行
这样加了还不行的,html文档里面还就只能设定这个字体,设了其他字体就不行了,这个比较郁闷。
这就还正好牵到第二个问题,html格式非常非常严格,有丁点的不对的地儿就报错,这个更郁闷。
[html]
view plaincopyprint?
<?xml
version="1.0"
encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<style>
body{
font-family:SimSun;
font-size:14px;
}
</style>
<meta
http-equiv="Content-Type"
content="text/html;charset=UTF-8"></meta>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style> body{ font-family:SimSun; font-size:14px; } </style> <meta http-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?
<body>
<table
style="margin-top: 120px;table-layout:fixed; word-break:break-strict;">
<tbody>
<tr>
<td>
<b>新华社中国网事:【莫言:诺贝尔奖金将用来买房】巨额奖金怎么用?</b><br/>刚刚获得诺贝尔文学奖的莫言在接受新华社中国网事记者专访时笑着说:“我准备在北京买套房子,大房子,后来有人提醒我说也买不了多大的房子,5万多一平米,750万也就是120多平米。”
</td>
</tr>
</tbody>
</table>
</body>
<body> <table style="margin-top: 120px;table-layout:fixed; word-break:break-strict;"> <tbody> <tr> <td> <b>新华社中国网事:【莫言:诺贝尔奖金将用来买房】巨额奖金怎么用?</b><br/>刚刚获得诺贝尔文学奖的莫言在接受新华社中国网事记者专访时笑着说:“我准备在北京买套房子,大房子,后来有人提醒我说也买不了多大的房子,5万多一平米,750万也就是120多平米。” </td> </tr> </tbody> </table> </body>
body中有个table,就一行文字,但是呢,一行非常长的文字,没有换行,这样输出的pdf就会把表格撑开,一行显示,pdf就显示不全这些文字,就是这个问题,把我搞死了,还好不断的摸索,尝试,google,终于网上有哥们给出解决办法,给出链接:【他解决问题还是蛮多的,顶起http://blog.csdn.net/shanliangliuxing/article/details/6833471】原来是itext源码问题,完全忽略咱强大的china的存在,他源码换行是按照空格换行,老外嘛,单词之间空格表示,咱中文不行啊,所以果断修改源码,感谢哥们提供下载,我试过了,没有问题的
这样用需要有CSS配合,上面table中
[html]
view plaincopyprint?
table-layout:fixed; word-break:break-strict;
table-layout:fixed; word-break:break-strict;要加上。
相关文章推荐
- 利用Flying Saucer 和 iText 实现HTMl转PDF(java)
- 使用html2canvas截屏,利用itextpdf转为pdf保存到数据库
- 利用Flying Saucer 和 java iText 实现HTMl转PDF
- 利用itext导出HTML到PDF,解决中文不显示和中文不换行的问题
- 利用html模版自动进行后台数据统计与分页
- 利用iText在JSP中生成PDF报表
- 利用iText操作PDF文件
- Java:Excel转PDF实现方案;基于POI与Itext进行搭配.
- iText的使用例子说明(利用Itext画模板导出word、pdf,纯java实现)
- 利用iTextSharp对PDF进行签名
- 利用iText生成pdf报表
- 利用itext操作pdf从数据库导出大量数据--添加水印(四)
- itext xmlworker转换html生成pdf文件
- 使用 itext、flying-saucer 实现html转PDF
- java 利用itext生成PDF并下载
- 利用手头工具对html的select进行排序
- mac下利用Pandoc、LaTeX 转换markdown成html,pdf
- 使用ITEXT生成pdf文件,使用POI、jxl对excel文件进行读取
- itext转换html成pdf,支持中文,并且中文换行