一、使用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;
}
}