使用itext导出数据到pdf中

最进项目中用到,

先引入依赖

		<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.6</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>

然后工具类代码

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
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;
/**
 *需要使用Adobe Acrobat DC制作好PDF模板,已经可以导入,设计好模板之后完成封装。
 * 
 *
 */
public class Data2Pdf {
    public static final String SRC =  "C:/Users/tym/Desktop/template1.pdf";
    public static final String DESC = "C:/Users/tym/Desktop/test.pdf";
    public static void main(String[] args) {
            data2Pdf();
            System.out.println("success");

    }
    public static void data2Pdf() {
        PdfReader reader = null;
        PdfStamper ps = null;
        ArrayList<BaseFont> fontList = null;
        ByteArrayOutputStream bos = null;
        try {
            reader = new PdfReader(SRC);
            bos = new ByteArrayOutputStream();
            ps = new PdfStamper(reader, bos);
//          使用中文字体 
            BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
            fontList = new ArrayList<BaseFont>();
            fontList.add(bf);
//          取出报表模板中的所有字段 
            AcroFields fields = ps.getAcroFields();
//          应用对字体的设置
            fields.setSubstitutionFonts(fontList);
//            Iterator<String> iterator = fields.getFields().keySet().iterator();
//            for (int num = 0; num < str.size(); num++) {
//                String name = iterator.next();
//                System.out.println(name);
//                fields.setField(name, str.get(num));
//            }
            fillData(fields, data());
            ps.setFormFlattening(true);
            ps.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e){
            e.printStackTrace();
        }
//      生成pdf路径
        OutputStream fos = null;
        try {
            fos = new FileOutputStream(DESC);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            fos.write(bos.toByteArray());
            fos.flush();
            fos.close();
            bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }   
    public static void fillData(AcroFields form, Map<String, String> data) {
        for (String key : data.keySet()) {
            String value = data.get(key);
            try {
                form.setField(key, value);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (DocumentException e) {
                e.printStackTrace();
            }
        }
    }
    
    public static Map<String, String> data() {
        Map<String, String> data = new HashMap<String, String>();
        data.put("fill_1", "t");
        data.put("fill_2", "15级");
        data.put("fill_3", "31班");
        data.put("fill_4", "北京");
        data.put("fill_5", "13919056");
        data.put("fill_6", "hahaha");
        return data;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值