原创文章,转载请注明原文章地址,谢谢!
一、pdf模板制作
1)word编辑模板
image2)转成pdf模板
这个比较简单,wps另存为pdf格式就行
-
编辑pdf模板字段
pdf的编辑一般的软件就不行了,需要下载一个专业软件Adobe Acrobat DC,网上有破解版的,也可以关注“村中一少”公众号,回复“Adobe Acrobat DC”获取下载地址。
安装成功后,右键使用Adobe Acrobat编辑打开pdf文件,以“编辑表单”模式打开,对pdf字段编辑
image
image
image
image
然后,对其中的变量字段进行修改,改成和程序中的实体对象字段对应,这一步很重要,切记。
image双击后,修改文本属性,可以设置字体大小、字体类型以及其它的,自己操作一遍就ok了。
二、springboot对接pdf
1)依赖包引入
<!-- itext pdf -->
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.11</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
2)pdf工具类
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;
import java.io.*;
import java.util.*;
public class PdfUtils {
/**
* @param fields
* @param data
* @throws IOException
* @throws DocumentException
*/
private static void fillData(AcroFields fields, Map<String, String> data) throws IOException, DocumentException {
List<String> keys = new ArrayList<String>();
Map<String, AcroFields.Item> formFields = fields.getFields();
for (String key : data.keySet()) {
if(formFields.containsKey(key)){
String value = data.get(key);
fields.setField(key, value); // 为字段赋值,注意字段名称是区分大小写的
keys.add(key);
}
}
Iterator<String> itemsKey = formFields.keySet().iterator();
while(itemsKey.hasNext()){
String itemKey = itemsKey.next();
if(!keys.contains(itemKey)){
fields.setField(itemKey, " ");
}
}
}
/**
* @param templatePdfName
* 模板pdf名称
* @param generatePdfPath
* 生成pdf路径
* @param data
* 数据
*/
public static String generatePDF(String templatePdfName, String generatePdfPath, Map<String, String> data) {
OutputStream fos = null;
ByteArrayOutputStream bos = null;
try {
byte[] bytes =generatePDF(templatePdfName,data);
fos = new FileOutputStream(generatePdfPath);
fos.write(bytes);
fos.flush();
return generatePdfPath;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
/**
* @param templatePdfName
* 模板pdf名称
* @param data
* 数据
*/
public static byte[] generatePDF(String templatePdfName, Map<String, String> data) {
ByteArrayOutputStream bos = null;
try {
InputStream istemplate =PdfUtils.class.getClassLoader().getResourceAsStream(templatePdfName);
PdfReader reader = new PdfReader(istemplate);
bos = new ByteArrayOutputStream();
/* 将要生成的目标PDF文件名称 */
PdfStamper ps = new PdfStamper(reader, bos);
/* 使用中文字体 */
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);
/* 必须要调用这个,否则文档不会生成的 如果为false那么生成的PDF文件还能编辑,一定要设为true*/
ps.setFormFlattening(true);
ps.close();
return bos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
// public static void main(String[] args) {
// Map<String, String> data = new HashMap<String, String>();
// data.put("sex", "男");
// data.put("payType", "微信");
// data.put("receiptCode","20010001");
// data.put("realName","nnn");
// data.put("age","30");
// data.put("examType","统考");
// data.put("college","科技大学");
// data.put("major","计算机");
//
// data.put("email","lynhchun@126.com");
// data.put("qqWx","616690485");
// data.put("parentPhone","13453457219");
// data.put("phone","15392687219");
//
// data.put("targetMajor","计算机科学与技术");
// data.put("examDate","2019");
// data.put("tutorType","暑假冲刺班");
// data.put("courseName","英语、数学");
//
// data.put("createTime","2019-04-18 16:26:30");
// data.put("payAmountWord","二百元整");
// data.put("payAmount","200");
// data.put("createBy","nnn");
// data.put("chargePerson","nnn");
// data.put("remark","无");
// data.put("financeUser","nnn");
//
// data.put("payStatus","(全额)");
//
//
//
// generatePDF("e:\\\\ky2.pdf",
// "e:\\ky3.pdf", data );
// }
}
service
// 构造pdf字段
Map<String, String> pdfData = Object2MapUtil.setConditionMap(commonAllData);
//4 生成pdf
byte[] bytes = PdfUtils.generatePDF("conf/"+getTemplate()+".pdf", pdfData);
//2 生成文件
BaseResponse response = appFileService.upload(bytes,".pdf");
在程序中调用成功后,就ok了
网友评论