本文先叙述,如何操作PDF模板生成PDF文件,再说明在SpringMVC中如何根据PDF模板生成PDF文件。
使用PDF模板生成PDF文件需要以下几个步骤:
1. 使用Microsoft Office Word画好模板
此步骤就不详述了,就是一个普通的Word文件(template.docx)。给个示例截图:
2. 使用Adobe Acrobat X Pro将Word文件转换为带表单字段的PDF模板文件
1) 打开Adobe Acrobat X Pro
2) 选择“创建PDF表单”
3) 选择源:(PDF、Word、Excel或其它文件类型),下一步
4) 定位Word文件路径,下一步
5) Adobe Acrobat X Pro会自动猜测表单字段位置,如图
6) 一般生成的表单字段都不符合我们的要求,选中删除即可。建议删除自动生成的表单域,不然可能会出现无法显示(中文)内容等问题。
7) 点击右键选择文本框,拖动到适当的位置,设置好域名称,字号,字体等。
8) 保存模板文件。(template.pdf)
3. 使用itext操作PDF模板,填充数据,生成PDF文件
1) 需要jar包:itext.jar、itextAsian.jar
2) 核心代码:
package personal.hutao.test; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import org.junit.Test; import com.lowagie.text.DocumentException; import com.lowagie.text.pdf.AcroFields; import com.lowagie.text.pdf.PdfReader; import com.lowagie.text.pdf.PdfStamper; public class TestPdf { @Test public void test() throws IOException, DocumentException { String fileName = "D:/template.pdf"; // pdf模板 PdfReader reader = new PdfReader(fileName); ByteArrayOutputStream bos = new ByteArrayOutputStream(); PdfStamper ps = new PdfStamper(reader, bos); AcroFields fields = ps.getAcroFields(); fillData(fields, data()); ps.setFormFlattening(true); ps.close(); OutputStream fos = new FileOutputStream("D:/contract.pdf"); fos.write(bos.toByteArray()); } public void fillData(AcroFields fields, Map<String, String> data) throws IOException, DocumentException { for (String key : data.keySet()) { String value = data.get(key); fields.setField(key, value); } } public Map<String, String> data() { Map<String, String> data = new HashMap<String, String>(); data.put("borrower", "胡桃同学"); return data; } }
3) 打开contract.pdf,如图
至此,就实现了根据PDF模板生成PDF文件。
SpringMVC的视图中已提供了对PDF模板文件的支持:org.springframework.web.servlet.view.document.AbstractPdfStamperView。那么只需要配置好此视图就可以了。
具体分为以下步骤:
1) 实现抽象类AbstractPdfStamperView
package personal.hutao.view; import java.io.IOException; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.view.document.AbstractPdfStamperView; import com.lowagie.text.DocumentException; import com.lowagie.text.pdf.AcroFields; import com.lowagie.text.pdf.PdfStamper; public class PdfStamperView extends AbstractPdfStamperView { public static final String DATA = "data"; public static final String FILENAME = "mergePdfFileName"; @SuppressWarnings("unchecked") @Override protected void mergePdfDocument(Map<String, Object> model, PdfStamper stamper, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setHeader("Content-Disposition", "attachment;filename=" + new String(model.get(FILENAME).toString().getBytes(), "ISO8859-1")); AcroFields fields = stamper.getAcroFields(); fillData(fields, (Map<String, String>) model.get(DATA)); stamper.setFormFlattening(true); } private void fillData(AcroFields fields, Map<String, String> data) throws IOException, DocumentException { for (String key : data.keySet()) { String value = data.get(key); fields.setField(key, value); } } }
2) 在SpringMVC的配置文件中配置视图
<!-- 按照BeanName解析视图 --> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> <property name="order" value="1" /> <!-- 优先使用此视图解析,避免先被解析为JSP --> </bean> <!-- 定义Pdf模版视图 --> <bean id="contract" class="personal.hutao.view.PdfStamperView"> <property name="url" value="/WEB-INF/template/template.pdf" /> </bean>
3) Controller中的业务逻辑处理
package personal.hutao.controller; import static personal.hutao.view.PdfStamperView.DATA; import static personal.hutao.view.PdfStamperView.FILENAME; import java.util.HashMap; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @RequestMapping("/contract") @Controller public class TestController { @RequestMapping("/export/pdf") public String exportPdf(Model model) { model.addAttribute(DATA, data()); model.addAttribute(FILENAME, "XXX贷款合同"); return "contract"; // 与personal.hutao.view.PdfStamperView的bean id匹配 } private Map<String, String> data() { Map<String, String> data = new HashMap<String, String>(); data.put("borrower", "胡桃同学"); return data; } }
OK,这样就可以通过SpringMVC加载PDF模板来导出PDF文件了。赶快试试吧~
相关推荐
NULL 博文链接:https://liuzidong.iteye.com/blog/1071823
springmvc + easyui实现文件下载,其中springmvc是使用了注解技术的
详细介绍了springMVC 执行原理,配置,注解项目实例。
基于springmvc框架的代码生成器,生成包含bo、service、controller、增删改查jsp等文件。
springmvc工程简单模板,仅加入了spring架包,已配置web.xml、application.xml。用Tomcat部署,可直接用浏览器运行工程。
此框架可自动生成SpringMvc+mybatis框架结构数据库采用的是mysql用户可以自行更改成自己需要的数据库,使用时将本项目导入myeclipse或eclipse中,更改项目名称为 你自定义的项目名称后在Test包中有2个java类...
跟开涛学springmvc pdf电子文档版 适合学习springmvc 非常好的教程
SpringMVC指南 pdf 百度云链接
最新版java代码生成器基于springMvc+mysql 后台功能一键生成 压缩包里的jdk文件目录 请自行下载jdk1.8.0_45版本并覆盖进去 没有jdk是运行不起来的 也可以下载其他jdk版本 但是jdk1.8.0_45这个文件目录名称不要更改 ...
springMVC初始框架模板,可以直接启动tomcat进行测试,也可以作为springMVC学习和开发的起步模板。
java后台开发领域中热门后台架构SSM中的SpringMVC文档,包含SpringMVC的入门案例,SpringMVC的介绍,用于javaweb开发,含有基本的代码块
springmvc 的pdf使用介绍,源码以及编译文件
java代码生成器、SpringMvc、三层、mybatis、mybatisPlus
此框架可自动生成SpringMvc+mybatis框架结构数据库采用的是mysql用户可以自行更改成自己需要的数据库,使用时将本项目导入myeclipse或eclipse中,更改项目名称为 你自定义的项目名称后在Test包中有2个java类...
1、导出pdf excel 子报表 2、ireport springMVC
SpringMVC框架十分强大,这三份文档可帮助您从入门到深入理解SpringMVC
SpringMvc 源码解析 包括DispatcherServlet初始化流程,拦截流程,处理逻辑等
本资源是基于Springmvc的图片上传案例,并对上传的图片添加了生成缩略图的功能。
SpringMVC上下两部分,详细讲解,具体的操作步骤(核心思想,请求原理,URL地址映射等)祝早日脱离苦海!祝早日成功!