一、使用word设计pdf模板,并另存为pdf格式的文件。
二、使用Adobe Acrobat DC工具,打开pdf文件,工具中选择准备表单并打开
三、在文件中设置域名称,如下图
四、下面是正式的操作
pom依赖
<!-- 生成PDF相关 iText,必须引入jar包 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.12</version>
</dependency>
<!-- 生成PDF相关 输出中文,还要引入下面itext-asian.jar包: -->
<dependency>
<groupId>org.bouncycastle.bcprov-jdk15on.1.57.org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.57</version>
</dependency>
<!-- 生成PDF相关 设置pdf文件密码,还要引入下面bcprov-jdk15on.jar包: -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
利用pdf模板PDFTemplateExportUtil,生成并导出pdf
public class PDFTemplateExportUtil {
/*
*
* @Description: TODO(利用模板生成pdf的方法)
*
* @param templatePath 模板的路径
*
* @param o 模板参数
* @param fileName 导出文件名称
*
* @throws
*/
public static void pdfout(String templatePath, Map<String, Object> o,String fileName, HttpServletResponse response) {
PdfReader reader;
OutputStream out;
ByteArrayOutputStream bos;
PdfStamper stamper;
try {
fileName = new String(fileName.getBytes("gb2312"), "ISO8859-1");//处理中文乱码,防止名称不对应
out = response.getOutputStream();// 输出流
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName + ".pdf");// 设置文件名
reader = new PdfReader(templatePath);// 读取pdf模板
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
// 文字类的内容处理
Map<String, String> datemap = (Map<String, String>) o.get("datemap");
for (String key : datemap.keySet()) {
String value = datemap.get(key);
form.setField(key, value);
}
// 图片类的内容处理
Map<String, String> imgmap = (Map<String, String>) o.get("imgmap");
for (String key : imgmap.keySet()) {
System.out.println("picture key:" + key);
String value = imgmap.get(key);
String imgpath = value;
int pageNo = form.getFieldPositions(key).get(0).page;
Rectangle signRect = form.getFieldPositions(key).get(0).position;
float x = signRect.getLeft();
float y = signRect.getBottom();
// 根据路径读取图片
Image image = Image.getInstance(imgpath);
//网络图片
//Image image = Image.getInstance(new URL(imgpath))
// 获取图片页面
PdfContentByte under = stamper.getOverContent(pageNo);
// 图片大小自适应
image.scaleToFit(signRect.getWidth(), signRect.getHeight());
// 添加图片
image.setAbsolutePosition(x, y);
under.addImage(image);
}
stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
stamper.close();
Document doc = new Document();
PdfCopy copy = new PdfCopy(doc, out);
doc.open();
int n = reader.getNumberOfPages();
// 根据页数导出pdf,防止页面丢失
for (int i = 1; i <= n; i++) {
PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), i);
copy.addPage(importPage);
}
doc.close();
out.flush();
out.close();
} catch (IOException e) {
System.out.println(e);
} catch (DocumentException e) {
System.out.println(e);
}
}
}
请求action
@RequestMapping(value = "employee/infoDetail")
public @ResponseBody CjwResult infoDetail(Long employeeId,HttpServletRequest request, HttpServletResponse response) {
//获取模板路径
String classpath = this.getClass().getClassLoader()
.getResource("/").getPath() ;
String path = classpath+ "template/resumetemplate.pdf";
String webappRoot = classpath.replaceAll("WEB-INF/classes/", "");
// String templatePath = "/template/resumetemplate.pdf";
System.out.println(employeeId);
CjwResult result = null;
try {
Map<String, Object> o = new HashMap<>();
Map<String, Object> map = new HashMap<>();
map.put("employeeName","alan");
map.put("mobile", "18500091965");
map.put("email", "[email protected]");
map.put("nation", "汉");
map.put("hireDate", "2019-9-17");
map.put("marital", "未婚");
map.put("certificateCode", "342222198909175650");
map.put("liveAddress", "上海市长宁区娄山关路600弄2号捷运新虹桥大厦7E");
Map<String, Object> map2 = new HashMap<>();
map2.put("personalImg", webappRoot+"images/person.png");
map2.put("idCardFont", webappRoot+"images/person.png");
map2.put("idCardBack", webappRoot+"images/person.png");
map2.put("acadeCertificate", webappRoot+"images/person.png");
map2.put("degreeCertificate", webappRoot+"images/person.png");
o.put("datemap", map);
o.put("imgmap", map2);
String filename ="员工信息表";
PDFTemplateExportUtil.pdfout(path, o,filename, response);
result=new CjwResult(200, "sucess", null);
} catch (Exception e) {
log.info("异常:"+e);
}
return result;
}
}