• 创建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下载成功

    效果图:

    感谢您的阅读

  • 相关阅读:
    Eclipse Clojure 开发插件
    leiningen安装记录
    XX-NET史上最详细完整教程
    使用Chrome浏览器设置XX-net的方法
    Sublime text 3搭建Python开发环境及常用插件安装
    python集合(set)类型的操作
    python编码问题在此终结
    新版的 selenium已经放弃PhantomJS改用Chorme headless
    python爬虫积累(一)--------selenium+python+PhantomJS的使用(转)
    Pyinstaller打包selenium去除chromedriver黑框问题解决!!!
  • 原文地址:https://www.cnblogs.com/changhai/p/7248721.html
Copyright © 2020-2023  润新知