Java--依照PDF模板进行数据的填充并输出
Java–依照PDF模板进行数据的填充并输出
今天因为有一个逻辑问题迟迟没有定下来,老板去了学习,所以闲着也是闲着,就抽空学习研究了下用Java输出PDF文件的技术。
引入相应的Jar包
这是导出pdf文件必备的jar包,我们将其在pom文件中引用
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
pdf生成的主要方法
首先需要创建一个pdf模板,再把该模板引入至项目的resource文件夹下,再在代码中进行资源文件的读取。
private static ByteArrayOutputStream createPdfStream(String templateFilePath, String templateFileName, Map<String, String> resultMap) {
ByteArrayOutputStream ba = new ByteArrayOutputStream();
try {
PdfReader reader = new PdfReader(templateFilePath + "\" + templateFileName);
PdfStamper stamp = new PdfStamper(reader, ba);
//使用字体
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//获取模版中的字段
AcroFields form = stamp.getAcroFields();
//填充表单
if (resultMap != null) {
//依次获取要填充的数据
for (Map.Entry<String, String> entry : resultMap.entrySet()) {
form.setFieldProperty(entry.getKey(), "textfont", bf, null);
form.setField(entry.getKey(), entry.getValue());
}
}
stamp.setFormFlattening(true);//设置为不能编辑
stamp.close();
reader.close();
} catch (IOException ioException) {
ioException.printStackTrace();
} catch (DocumentException documentException) {
documentException.printStackTrace();
}
return ba;
}
导出的方法
@PostMapping("/pdfTest")
public String pdfTest() {
//定义要填充的数据封装成Map对象
Map<String, String> resultMap= new HashMap<String, String>(0);
resultMap.put("name","张三");
//根据模板填充数据源
try{
ByteArrayOutputStream pdf = createPdfStream(ClassLoader.getSystemResource("template").getPath(), "pdf.pdf", resultMap);
//输出Pdf的位置
String newPadPath="D:\idea_workspace\springboot-webscoket\src\main\resources\template"+"\pdf2.pdf";
FileOutputStream out = new FileOutputStream(newPadPath);
out.write(pdf.toByteArray());
out.flush();
out.close();
pdf.close();
}catch (Exception e){
e.printStackTrace();
}
return "success";
}
根据以上的代码可以进行测试,可以进行pdf的导出。
结语
不知为何,最近心情十分地烦躁,或许是因为环境的因素吧,每次来到了工位上就想马上下班一起和她煲剧,在这里感受不到任何的乐趣。还是那句话,既来之,则安之。
