Java使用Freemarker和iText生成PDF文件
2016-06-19 10:02
826 查看
项目里需要实现客户下载pdf文件的一个需求,在经过比较之后决定使用Freemarker+iText解决这个问题。在整个实现过程中遇到不少问题,总结一下贴出来吧,也许今后用得上。
使用的jar:iText2.0.8、core-renderer、iTextAsian
问题1:iText的版本问题
最初使用的是iText 2.1.7版本,但是发现这句话总是会报错,具体报错就不贴了,记得是无法找到一个方法
Java代码
ITextRenderer renderer = new ITextRenderer();
后来换了2.0.8以后这个问题不在出现,也许是和其他jar有冲突吧。
iTextAsian是解决中文和日文输出的问题。
问题2:字体样式
看到网上有不少讨论这个问题的帖子,使用这两个技术时,感觉蛮简单
在后台:
Java代码
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont(fontDir1, BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
fontResolver.addFont(fontDir2, BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
另外在freemarker中,使用css加上字体即可:
Java代码
body {
font-family: SimSun;
font-size:14px;
font-style:italic;
font-weight:500;
}
.heiti
{
font-family: simsun-bold;
}
问题3:图片问题
之前生成的pdf总是无法显示图片,无论把图片放在ftl文件的什么位置,在ftl中写什么样子的路径都不好使,
问题解决:
Java代码
renderer.setDocumentFromString(str);
// 解决图片的相对路径问题
renderer.getSharedContext().setBaseURL("file:/D:/images/");
Java代码
renderer.layout();
renderer.createPDF(os);
os.close();
当然这里的路径最好设置为资源文件中的值,这样在上线后即便修改也无需重新部署。
使用的jar:iText2.0.8、core-renderer、iTextAsian
问题1:iText的版本问题
最初使用的是iText 2.1.7版本,但是发现这句话总是会报错,具体报错就不贴了,记得是无法找到一个方法
Java代码
ITextRenderer renderer = new ITextRenderer();
后来换了2.0.8以后这个问题不在出现,也许是和其他jar有冲突吧。
iTextAsian是解决中文和日文输出的问题。
问题2:字体样式
看到网上有不少讨论这个问题的帖子,使用这两个技术时,感觉蛮简单
在后台:
Java代码
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont(fontDir1, BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
fontResolver.addFont(fontDir2, BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
另外在freemarker中,使用css加上字体即可:
Java代码
body {
font-family: SimSun;
font-size:14px;
font-style:italic;
font-weight:500;
}
.heiti
{
font-family: simsun-bold;
}
问题3:图片问题
之前生成的pdf总是无法显示图片,无论把图片放在ftl文件的什么位置,在ftl中写什么样子的路径都不好使,
问题解决:
Java代码
renderer.setDocumentFromString(str);
// 解决图片的相对路径问题
renderer.getSharedContext().setBaseURL("file:/D:/images/");
Java代码
renderer.layout();
renderer.createPDF(os);
os.close();
当然这里的路径最好设置为资源文件中的值,这样在上线后即便修改也无需重新部署。
相关文章推荐
- Java项目中使用Freemarker生成Word文档
- [Spring框架]Spring IOC的原理及详解。
- 20145236 《Java程序设计》课程总结
- 一些常见Java异常归类
- Spring Security xsd 异常
- Java千百问_08JDK详解(009)_java程序如何运行
- JAVA匿名内部类
- kafka集群搭建和使用Java写kafka生产者消费者
- Java千百问_08JDK详解(008)_通过代码如何编译java文件
- AOP编程简介及其在Spring框架中的使用
- 手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis
- 开山篇
- JAVA、OC的内存管理机制的本质
- JAVA集合框架Collection
- [Java] 继承中,父类被覆盖的成员变量、方法的可访问性
- Java File类的介绍
- Java动态编程之javassist
- java 高并发
- java 设计模式 之 桥接
- 深度剖析JDK动态代理机制