prader6

pdf 下载demo

 最近写了个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代码:
复制代码
 1  @Override
 2     public void downLoad(HttpServletResponse response) throws IOException, DocumentException {
 3         System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
 4                 "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
 5         String fileName = "qqq.pdf";
 6         response.setContentType("application/pdf");
 7         OutputStream op = null;
 8         PdfReader pr = null;
 9         PdfStamper ps = null;
10         try {
11             response.setHeader("Content-Disposition", "attachment;fileName="
12                     + URLEncoder.encode(fileName, "UTF-8"));
13 
14             op =  response.getOutputStream();
15             // 2 读入pdf表单
16             pr = new PdfReader("pdf/" + fileName);
17             // 3 根据表单生成一个新的pdf
18             ps = new PdfStamper(pr, op);
19             // 4 获取pdf表单
20 
21             HashMap<String, Object> map = dealMap();
22             // 6查询数据
23 
24             // 7遍历data 给pdf表单表格赋值
25             for (String keySet : map.keySet()){
26                 if (map.get(keySet) != null && !map.get(keySet).equals("")){
27                     AcroFields acroFields = ps.getAcroFields();
28                     // 5给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示
29                     BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",
30                             BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
31                     acroFields.addSubstitutionFont(bf);
32                     acroFields.setField(keySet,map.get(keySet).toString());
33                 }
34 
35             }
36             //设置生成的pdf文件高量参数是否可见,true不可见,false可
37             ps.setFormFlattening(true);
38             System.out.println("===============PDF导出成功!=============");
39 
40         } catch (Exception e) {
41             e.printStackTrace();
42         }finally {
43             //这里关流顺序不能先关输出流,要不然会报错
44             ps.close();
45             pr.close();
46             op.close();
47 
48         }
49 
50 
51     }
View Code
复制代码

 上面的 dealMap()是我自己查询数据的方法,每个人用自己的就好。。

  需要 把上面的模板直接粘贴,自己写查询数据的方法就可以了。

这里 附上 源码 

链接:https://pan.baidu.com/s/1OuBCQJpJ23IV3sNQAt6BBw
提取码:nvut

posted on   prader6  阅读(514)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)

导航

统计

点击右上角即可分享
微信分享提示