1、引入依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.19</version>
</dependency>
2、代码:
PdfReader reader = null;
ByteArrayOutputStream bos = null;
PdfStamper stamper = null;
try {
Resource resource = resourceLoader.getResource("classpath:盖章证明模板.pdf");
reader = new PdfReader(resource.getInputStream());
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
//这个form就是pdf里面的表单key就是pdf的键 value 就是往里面要放的值
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
AcroFields form = stamper.getAcroFields();
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
form.setFieldProperty(entry.getKey(), "textfont", bf, null);
form.setField(entry.getKey(), entry.getValue());
}
//true代表生成的PDF文件不可编辑
stamper.setFormFlattening(true);
stamper.close();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
String timeString = formatter.format(LocalDateTime.now());
String fileName = "涉敏载体集中销毁证明" + timeString +".pdf";
response.reset();
response.setContentType("application/pdf;charset=UTF-8");
response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(fileName, "UTF-8"));
OutputStream out = response.getOutputStream();
//加载pdf
PDDocument document = PDDocument.load(bos.toByteArray());
//获得文档属性对象
PDDocumentInformation info = document.getDocumentInformation();
//修改标题属性 这个标题会被展示
info.setTitle(fileName);
document.setDocumentInformation(info);
//修改完直接输出到响应体中
document.save(out);
document.close();
out.close();
} catch (Exception e) {
log.error("pdf预览发生错误:{}", e.getMessage());
}