• 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

  • 相关阅读:
    安装RabbitMQ说明
    死锁
    管程
    MybatisPlus快速开发
    了解Mybatis-Plus
    查看监听器状态
    The command supports no service 解决办法
    任务11 Arduino光照报警器
    任务10 测试光的强度实验
    任务9 Arduino光敏实验
  • 原文地址:https://www.cnblogs.com/prader6/p/10477248.html
Copyright © 2020-2023  润新知