-
创建模板
下载PDFelement,新建一个pdf,依次点击 “编辑”、“表单”
然后保存就好了,key 为money
-
代码构建
pom文件引入jar
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
创建代码
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Service;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PRIndirectReference;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
@Service
public class ItextService {
public void createPDF() throws Exception{
Map<String,String> map=new HashMap<>();
map.put("money", "30,000元");
map.put("conA", "XXX科技有限公司");
map.put("conB","张三");
convertTransData(map);
System.out.println("执行完毕");
}
/**
* 将数据转换为输入字节流
* */
protected InputStream convertTransData(Map<String,String> data)
throws Exception {
if (data==null || data.isEmpty())
return null;
String template="/Users/yongyang/Desktop/test.pdf";
try {
// InputStream in =
// this.getClass().getResourceAsStream(template);
byte[] b=FileUtils.readFileToByteArray(new File(template));
ByteArrayOutputStream out =
(ByteArrayOutputStream)generate(new PdfReader(b),data);
ByteArrayInputStream ret =
new ByteArrayInputStream(out.toByteArray());
//将pdf字节流输出到文件流
OutputStream fos = new FileOutputStream("/Users/yongyang/Desktop/test_r.pdf");
fos.write(out.toByteArray());
fos.close();
out.close();
return ret;
} catch (Exception e) {
throw new Exception(e);
}
}
/**
* 将数据,填入pdf表单域
*
* */
public static OutputStream generate(PdfReader template, Map data)
throws Exception {
String fontPath="~/Desktop/STHeiti Light.ttc";
//创建基础字体
// BaseFont bfChinese = BaseFont.createFont(fontPath,BaseFont.IDENTITY_H,BaseFont.EMBEDDED);
BaseFont bfChinese = BaseFont.createFont( "STSong-Light" , "UniGB-UCS2-H" , BaseFont.EMBEDDED);
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
PdfStamper stamp = new PdfStamper(template, out);
AcroFields form = stamp.getAcroFields();
// set the field values in the pdf form
for (Iterator it = data.keySet().iterator(); it.hasNext();) {
String key = (String) it.next();
String value = (String) data.get(key);
form.setFieldProperty(key, "textfont", bfChinese, null);
form.setField(key, value);
}
stamp.setFormFlattening(true);
stamp.close();
template.close();
return out;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
-
生成结果