java使用pdf模板导出pdf

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import com.itextpdf.text.pdf.codec.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Snippt {

    private static final Logger logger = LoggerFactory.getLogger(Snippt.class);

    // 利用模板生成pdf
    public static BaseResponse fillTemplate(Map<String,Object> data) {
        BaseResponse baseResponse = new BaseResponse();
        // 模板路径
        String templatePath = "C:/Users/chenjun32853/Desktop/pdf/pdf2.pdf";
        // 生成的新文件路径
        String newPDFPath = "C:/Users/chenjun32853/Desktop/pdf/1.pdf";
        PdfReader reader = null;
        FileOutputStream out = null;
        ByteArrayOutputStream bos = null;
        PdfStamper stamper = null;
        Document doc = null;
        try {
            out = new FileOutputStream(newPDFPath);// 输出流
            reader = new PdfReader(templatePath);// 读取pdf模板
            bos = new ByteArrayOutputStream();
            stamper = new PdfStamper(reader, bos);
            AcroFields form = stamper.getAcroFields();

            String[] str = {"123456789", "TOP__ONE", "男", "1991-01-01", "130222111133338888", "浙江省杭州市"};
            int i = 0;
            java.util.Iterator<String> it = form.getFields().keySet().iterator();
            while (it.hasNext()) {
                String name = it.next().toString();
                System.out.println(name);
                if (name.contains("p")) {
//                    String fieldName = "picture";
                    // 通过域名获取所在页和坐标,左下角为起点
                    int pageNo = form.getFieldPositions(name).get(0).page;
                    Rectangle signRect = form.getFieldPositions(name).get(0).position;
                    float x = signRect.getLeft();
                    float y = signRect.getBottom();
                    // 读图片
                    
                    final String img = base64的图片;
                    Image image = null;
                    try {
                        image = Image.getInstance(Base64.decode(img));
                    } catch (BadElementException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    // 获取操作的页面
                    PdfContentByte under = stamper.getOverContent(pageNo);
                    // 根据域的大小缩放图片
                    image.scaleToFit(signRect.getWidth(), signRect.getHeight());

                    // 添加图片
                    image.setAbsolutePosition(x, y);
                    under.addImage(image);
                } else {
                    form.setField(name, str[i++]);
                }
            }


            stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true
            stamper.close();

            doc = new Document();
            PdfCopy copy = new PdfCopy(doc, out);
            doc.open();
            PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
            copy.addPage(importPage);
            doc.close();
            baseResponse.setCode(CommonErrorCodeEnum.SUCCESS.getCode());
            baseResponse.setMessage(CommonErrorCodeEnum.SUCCESS.getMessage());
        } catch (IOException e) {
            logger.error("流异常", e);
            baseResponse.setCode(CommonErrorCodeEnum.ERROR.getCode());
            baseResponse.setMessage("流异常");
        } catch (DocumentException e) {
            logger.error("模板异常", e);
            baseResponse.setCode(CommonErrorCodeEnum.ERROR.getCode());
            baseResponse.setMessage("模板异常");
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (Exception e) {
                    logger.error("io异常", e);
                }
            }
            if (bos != null) {
                try {
                    bos.close();
                } catch (Exception e) {
                    logger.error("io异常", e);
                }
            }
            if (stamper != null) {
                try {
                    stamper.close();
                } catch (Exception e) {
                    logger.error("stamper异常", e);
                }
            }
            if (doc != null) {
                try {
                    doc.close();
                } catch (Exception e) {
                    logger.error("stamper异常", e);
                }
            }

        }
        return baseResponse;
    }

    public static void main(String[] args) {
        Map map = new HashMap<String,Object>();
        fillTemplate(map);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值