使用Freemarker+iText生成PDF文件

本文介绍使用Freemarker和iText生成PDF文件的方法,包括解决字体样式、图片路径及版本兼容等问题。

项目里需要实现客户下载pdf文件的一个需求,在经过比较之后决定使用Freemarker+iText解决这个问题。在整个实现过程中遇到不少问题,总结一下贴出来吧,也许今后用得上。

 

使用的jar:iText2.0.8、core-renderer、iTextAsian

问题1:iText的版本问题

           最初使用的是iText 2.1.7版本,但是发现这句话总是会报错,具体报错就不贴了,记得是无法找到一个方法

          

ITextRenderer renderer = new ITextRenderer();

          后来换了2.0.8以后这个问题不在出现,也许是和其他jar有冲突吧。

          iTextAsian是解决中文和日文输出的问题。

 

问题2:字体样式

      看到网上有不少讨论这个问题的帖子,使用这两个技术时,感觉蛮简单

 

      在后台:

ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont(fontDir1, BaseFont.IDENTITY_H,
		    BaseFont.NOT_EMBEDDED);
fontResolver.addFont(fontDir2, BaseFont.IDENTITY_H,
		    BaseFont.NOT_EMBEDDED);

     另外在freemarker中,使用css加上字体即可:

 

body {
    font-family: SimSun;      
    font-size:14px;     
    font-style:italic; 
    font-weight:500;
}

.heiti
{
   font-family: simsun-bold;   
}

 

 

问题3:图片问题

     之前生成的pdf总是无法显示图片,无论把图片放在ftl文件的什么位置,在ftl中写什么样子的路径都不好使,后来参考了downpour大大的帖子http://downpour.iteye.com/blog/509417?page=4 

才解决了这个问题:

renderer.setDocumentFromString(str);
			
// 解决图片的相对路径问题   
renderer.getSharedContext().setBaseURL("file:/D:/images/"); 
  
renderer.layout();
renderer.createPDF(os);
os.close();

   当然这里的路径最好设置为资源文件中的值,这样在上线后即便修改也无需重新部署。

 

 

问题4:关于pdf中文换行以及分页的问题

    这2个问题我在项目中没有发现,似乎使用Freemarker会使得自动完成这2个任务吧。

 

 现就这么多,以后还会有关于Freemarker和iText的东西发上来,不得不赞下这2个项目啊,真是好用,呵呵

 另外感谢pourdown大大,大家还可以参考这个文章,不过是e文的:

 http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值