下载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<BaseFont> fontList = new ArrayList<BaseFont>();
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<String, String> data)
throws IOException, DocumentException {
for (String key : data.keySet()) {
String value = data.get(key);
fields.setField(key, value); // 为字段赋值,注意字段名称是区分大小写的
}
}
public static Map<String, String> data() {
Map<String, String> data = new HashMap<String, String>();
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'