最进项目中用到,
先引入依赖
<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;
}
}