javapdf模板生成pdf_【第9期】springboot: pdf操作

一、pdf模板制作

1)word编辑模板

4e03e72ececc79e9f04da23cb85f7dba.png

2)转成pdf模板

这个比较简单,wps另存为pdf格式就行

3) 编辑pdf模板字段

pdf的编辑一般的软件就不行了,需要下载一个专业软件Adobe Acrobat DC,网上有破解版的,也可以关注“村中一少”公众号,回复“Adobe Acrobat DC”获取下载地址。

0831abe0fb0b2b5191e579bcb9780776.png

安装成功后,右键使用Adobe Acrobat编辑打开pdf文件,以“编辑表单”模式打开,对pdf字段编辑

7dab186a39eb7004b941b910cc246635.png

b7e91a61c5f8c957c489c90ca089bcbe.png

858c0ae73fdb28aa60b43c1b47748d38.png

95312b8de880e7c7acf613b160aff4a7.png

然后,对其中的变量字段进行修改,改成和程序中的实体对象字段对应,这一步很重要,切记。

cd24d728c2411ca4ac19f06d88ec7b59.png

双击后,修改文本属性,可以设置字体大小、字体类型以及其它的,自己操作一遍就ok了。

二、springboot对接pdf

1)依赖包引入

 <!-- itext pdf  -->
        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>4.2.2</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

2)pdf工具类

package com.qh.enroll.app.utils;
​
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
​
import java.io.*;
import java.util.*;
​
public class PdfUtils {
            /**
         * @param fields
         * @param data
         * @throws IOException
         * @throws DocumentException
         */
        private static void fillData(AcroFields fields, Map<String, String> data) throws IOException, DocumentException {
            List<String> keys = new ArrayList<String>();
            Map<String, AcroFields.Item> formFields = fields.getFields();
            for (String key : data.keySet()) {
                if(formFields.containsKey(key)){
                    String value = data.get(key);
                    fields.setField(key, value); // 为字段赋值,注意字段名称是区分大小写的
                    keys.add(key);
                }
            }
            Iterator<String> itemsKey = formFields.keySet().iterator();
            while(itemsKey.hasNext()){
                String itemKey = itemsKey.next();
                if(!keys.contains(itemKey)){
                    fields.setField(itemKey, " ");
                }
            }
        }
​
        /**
         * @param templatePdfName
         *            模板pdf名称
         * @param generatePdfPath
         *            生成pdf路径
         * @param data
         *            数据
         */
        public static String generatePDF(String templatePdfName, String generatePdfPath, Map<String, String> data) {
            OutputStream fos = null;
            ByteArrayOutputStream bos = null;
            try {
                byte[] bytes =generatePDF(templatePdfName,data);
                fos = new FileOutputStream(generatePdfPath);
                fos.write(bytes);
                fos.flush();
                return generatePdfPath;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (fos != null) {
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }
​
    /**
     * @param templatePdfName
     *            模板pdf名称
     * @param data
     *            数据
     */
    public static byte[] generatePDF(String templatePdfName,  Map<String, String> data) {
        ByteArrayOutputStream bos = null;
        try {
            InputStream istemplate =PdfUtils.class.getClassLoader().getResourceAsStream(templatePdfName);
            PdfReader reader = new PdfReader(istemplate);
            bos = new ByteArrayOutputStream();
            /* 将要生成的目标PDF文件名称 */
            PdfStamper ps = new PdfStamper(reader, bos);
            /* 使用中文字体 */
            BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
            ArrayList<BaseFont> fontList = new ArrayList<BaseFont>();
            fontList.add(bf);
            /* 取出报表模板中的所有字段 */
            AcroFields fields = ps.getAcroFields();
            fields.setSubstitutionFonts(fontList);
            fillData(fields, data);
            /* 必须要调用这个,否则文档不会生成的  如果为false那么生成的PDF文件还能编辑,一定要设为true*/
            ps.setFormFlattening(true);
            ps.close();
​
            return bos.toByteArray();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
​
​
//        public static void main(String[] args) {
//            Map<String, String> data = new HashMap<String, String>();
//              data.put("sex", "男");
//              data.put("payType", "微信");
//              data.put("receiptCode","20010001");
//              data.put("realName","nnn");
//              data.put("age","30");
//              data.put("examType","统考");
//              data.put("college","科技大学");
//              data.put("major","计算机");
//
//            data.put("email","lynhchun@126.com");
//            data.put("qqWx","616690485");
//            data.put("parentPhone","13453457219");
//            data.put("phone","15392687219");
//
//            data.put("targetMajor","计算机科学与技术");
//            data.put("examDate","2019");
//            data.put("tutorType","暑假冲刺班");
//            data.put("courseName","英语、数学");
//
//            data.put("createTime","2019-04-18 16:26:30");
//            data.put("payAmountWord","二百元整");
//            data.put("payAmount","200");
//            data.put("createBy","nnn");
//            data.put("chargePerson","nnn");
//            data.put("remark","无");
//            data.put("financeUser","nnn");
//
//            data.put("payStatus","(全额)");
//
//
//
//            generatePDF("e:ky2.pdf",
//                    "e:ky3.pdf", data );
//        }
​
    }
​

service

  // 构造pdf字段
    Map<String, String> pdfData = Object2MapUtil.setConditionMap(commonAllData);
      //4 生成pdf
    byte[] bytes = PdfUtils.generatePDF("conf/"+getTemplate()+".pdf", pdfData);
   //2 生成文件 
    BaseResponse response = appFileService.upload(bytes,".pdf");

在程序中调用成功后,就ok了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值