iText使用PDF模板生成输出PDF

下载Adobe Acrobat 工具制作PDF模板,对模板中的变量使用表单进行设置,如下图:


准备表单
变量设置

代码实现:

/*
 * Copyright (c) 2005, 2019, EVECOM Technology Co.,Ltd. All rights reserved.
 * EVECOM PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 */

import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.*;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * description
 * created       2019/3/5 18:05
 *
 * @author Arno Chen
 * @version --添加版本信息
 * @see --添加类中引用的相关类和接口
 * @since Version 1.0
 */
public class exportPdfTest {
    public static void main(String[] args) throws Exception {
        test();
        System.out.println("success");
    }

    public static void test() throws IOException, DocumentException {
        String fileName = "D:/index.pdf"; // pdf模板
        PdfReader reader = new PdfReader(fileName);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        /* 将要生成的目标PDF文件名称 */
        PdfStamper ps = new PdfStamper(reader, bos);
        PdfContentByte under = ps.getUnderContent(1);

          /* 使用中文字体 */
        BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
        ArrayList fontList = new ArrayList();
        fontList.add(bf);

        /* 取出报表模板中的所有字段 */
        AcroFields fields = ps.getAcroFields();
        fields.setSubstitutionFonts(fontList);
        fillData(fields, data());

        /* 必须要调用这个,否则文档不会生成的 */
        ps.setFormFlattening(true);
        ps.close();


        OutputStream fos = new FileOutputStream("D:/zsResult.pdf");
        fos.write(bos.toByteArray());
        fos.flush();
        fos.close();
        bos.close();
    }

    public static void fillData(AcroFields fields, Map data)
            throws IOException, DocumentException {
        for (String key : data.keySet()) {
            String value = data.get(key);
            fields.setField(key, value); // 为字段赋值,注意字段名称是区分大小写的
        }
    }

    public static Map data() {
        Map data = new HashMap();
        data.put("name", "小猪佩奇");
        data.put("date", "2019年3月7号");
        return data;
    }
}




生成文件

执行代码出现输出中文

Font 'STSongStd-Light' with 'UniGB-UCS2-H' is not recognized.问题

网上找了解决方案都是需要改itext-asian的包名,改来改去都不行,看到别人上传了修改后的jar包,去CSDN下载需要积分(恶心),几经周折找到了可用的包,直接分享出来。

jar包下载地址:

链接:https://pan.baidu.com/s/1ADsiMe42aLVrgNBJjPdDkg 提取码:zwww
复制这段内容后打开百度网盘手机App,操作更方便哦

或者gradle依赖一下对应版本

compile group: 'com.itextpdf', name: 'itextpdf', version: '5.4.3'
compile group: 'com.itextpdf', name: 'itext-asian', version: '5.2.0'

你可能感兴趣的:(iText使用PDF模板生成输出PDF)