最近写了个pdf下载的demo,在这里记录一下。。
1 要下载pdf首先要有pdf 模板 ,制作pdf 模板就是 word 另存为 pdf 。
2 用 Adobe Acrobat X Pro 这个软件编辑刚才保存的pdf,先打开 ,然后点击工具,点击编辑 。。。这个工具是收费的,网上有好多破解版的。。 注意用这个工具编辑pdf的时候 生成的 域 有文本域 ,单选框 ,复选框,这里要注意,如果是复选框,复制是没办法赋值文字的。
大概是上面的样子。。
3 编写java代码: 主要思路是 , 通过数据库查出来的数据 ,赋值到pdf表单上。。
赋值需要用到
<!--用于pdf模板-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency> 上面这个jar包,直接把pom粘贴到自己的pom中就可以。 4 具体的java代码:
@Override
public void downLoad(HttpServletResponse response) throws IOException, DocumentException {
System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
String fileName = "qqq.pdf";
response.setContentType("application/pdf");
OutputStream op = null;
PdfReader pr = null;
PdfStamper ps = null;
try {
response.setHeader("Content-Disposition", "attachment;fileName="
+ URLEncoder.encode(fileName, "UTF-8")); op = response.getOutputStream();
// 2 读入pdf表单
pr = new PdfReader("pdf/" + fileName);
// 3 根据表单生成一个新的pdf
ps = new PdfStamper(pr, op);
// 4 获取pdf表单 HashMap<String, Object> map = dealMap();
// 6查询数据 // 7遍历data 给pdf表单表格赋值
for (String keySet : map.keySet()){
if (map.get(keySet) != null && !map.get(keySet).equals("")){
AcroFields acroFields = ps.getAcroFields();
// 5给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示
BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",
BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
acroFields.addSubstitutionFont(bf);
acroFields.setField(keySet,map.get(keySet).toString());
} }
//设置生成的pdf文件高量参数是否可见,true不可见,false可
ps.setFormFlattening(true);
System.out.println("===============PDF导出成功!============="); } catch (Exception e) {
e.printStackTrace();
}finally {
//这里关流顺序不能先关输出流,要不然会报错
ps.close();
pr.close();
op.close(); } }
上面的 dealMap()是我自己查询数据的方法,每个人用自己的就好。。
需要 把上面的模板直接粘贴,自己写查询数据的方法就可以了。
这里 附上 源码
链接:https://pan.baidu.com/s/1OuBCQJpJ23IV3sNQAt6BBw
提取码:nvut