zoukankan      html  css  js  c++  java
  • 创建PDF模板,java添加内容、导出下载PDF

    本文主要内容是:用java在pdf模板中加入数据,图片。

    废话不多说,举个非常简单的例子:

    首先创建word文档,导出PDF。

     用 软件adobe acrobat打开,操作步骤如图:

    在指定位置添加文本域, 保存退出。pdf模板创建完成,我们保存到 E:盘,起名叫 练习。

    接下来是java内容。

    在pom.xml文件加入,

    <!-- itext 图片转pdf -->
            <dependency>
                <groupId>com.itextpdf</groupId>
                <artifactId>itextpdf</artifactId>
                <version>5.5.10</version>
            </dependency>

    在Controller层创建,节约时间直接附上代码

    package com.boot.controller;
    
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.itextpdf.text.Image;
    import com.itextpdf.text.Rectangle;
    import com.itextpdf.text.pdf.AcroFields;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfContentByte;
    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.PdfStamper;
    
    @RestController
    public class PdfController {
    
        /**
         * 导出pdf
         * @author Changhai
         * @param response
         * @return
         * @throws UnsupportedEncodingException 
         */
        @RequestMapping(value={"/exportpdf"})
        public String exportPdf(HttpServletResponse response) throws UnsupportedEncodingException {            
            // 指定解析器
            System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
                    "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
            //String path = request.getSession().getServletContext().getRealPath("/upload/");
            String filename="练习.pdf";
            String path="e:/";
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "attachment;fileName="
                    + URLEncoder.encode(filename, "UTF-8"));
            OutputStream os = null;
            PdfStamper ps = null;
            PdfReader reader = null;
            try {
                os = response.getOutputStream();
                // 2 读入pdf表单
                reader = new PdfReader(path+ "/"+filename);
                // 3 根据表单生成一个新的pdf
                ps = new PdfStamper(reader, os);
                // 4 获取pdf表单
                AcroFields form = ps.getAcroFields();
                // 5给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示
                BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",
                        BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                form.addSubstitutionFont(bf);
                // 6查询数据================================================
                Map<String, Object> data = new HashMap<String, Object>();
                    data.put("name", "小帅哥");
                    data.put("like", "大美女");
                // 7遍历data 给pdf表单表格赋值
                for (String key : data.keySet()) {
                        form.setField(key,data.get(key).toString());
                }
                ps.setFormFlattening(true);
                 //-----------------------------pdf 添加图片----------------------------------
                // 通过域名获取所在页和坐标,左下角为起点
                System.out.println("pdf 添加图片");
                String imgpath="e:/美女.png";
                int pageNo = form.getFieldPositions("img").get(0).page;
                Rectangle signRect = form.getFieldPositions("img").get(0).position;
                float x = signRect.getLeft();
                float y = signRect.getBottom();
                // 读图片
                Image image = Image.getInstance(imgpath);
                // 获取操作的页面
                PdfContentByte under = ps.getOverContent(pageNo);
                // 根据域的大小缩放图片
                image.scaleToFit(signRect.getWidth(), signRect.getHeight());
                // 添加图片
                image.setAbsolutePosition(x, y);
                under.addImage(image);                 
                //-------------------------------------------------------------
                System.out.println("===============PDF导出成功=============");
            } catch (Exception e) {
                System.out.println("===============PDF导出失败=============");
                e.printStackTrace();
            } finally {
                try {
                    ps.close();
                    reader.close();
                    os.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return null;
        }
    }

    在浏览器上访问

    www.localhost:8080/exportpdf

    好了 pdf下载成功

    效果图:

    感谢您的阅读

  • 相关阅读:
    vue.js中created方法作用
    UasyUi的各种方法整理
    echarts 3.8.4: tree设置节点与节点之间连线的颜色,可以独立每条线分开设置
    echarts中的树形结构图(参数分析)
    echarts y轴数据如果太大就会造成坐标轴显示不完全的问题
    echarts 网络拓扑告警闪烁及提示信息自定义
    echarts 树图问题
    echarts grid多格显示问题
    echarts中自定义tooltip的换行问题
    yarn install 安装报错问题
  • 原文地址:https://www.cnblogs.com/changhai/p/7248721.html
Copyright © 2011-2022 走看看