导入依赖:
implementation 'com.documents4j:documents4j-local:1.0.3'
implementation 'com.documents4j:documents4j-transformer-msoffice-word:1.0.3' //word
implementation 'com.documents4j:documents4j-transformer-msoffice-excel:1.0.3' //excel
实现方式:
public void exportFilePdf(
Map<String, Object> data, String name, String fileName, HttpServletResponse response)
throws TemplateException, IOException {
Configuration configuration = new Configuration(Configuration.getVersion());
configuration.setClassForTemplateLoading(this.getClass(), "/templates");
Template template = configuration.getTemplate(name);
String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, data);
InputStream inputStream = IOUtils.toInputStream(content);
int index;
byte[] bytes = new byte[1024];
FileOutputStream downloadFile = new FileOutputStream("D:\\data\\a.docx");
while ((index = inputStream.read(bytes)) != -1) {
downloadFile.write(bytes, 0, index);
downloadFile.flush();
}
downloadFile.close();
inputStream.close();
File inputWord = new File("D:\\data\\a.docx");
// File outputFile = new File("D:\\data\\a.pdf");
try {
InputStream docxInputStream = new FileInputStream(inputWord);
// OutputStream outputStream = new FileOutputStream(outputFile);
IConverter converter = LocalConverter.builder().build();
ServletOutputStream outputStream = response.getOutputStream();
converter.convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();
docxInputStream.close();
outputStream.close();
inputWord.delete();
System.out.println("pdf转换成功");
} catch (Exception e) {
e.printStackTrace();
}
}
public void exportFileExcel(
Map<String, Object> data, String name, String fileName, HttpServletResponse response)
throws TemplateException, IOException {
Configuration configuration = new Configuration(Configuration.getVersion());
configuration.setClassForTemplateLoading(this.getClass(), "/templates");
Template template = configuration.getTemplate(name);
String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, data);
InputStream inputStream = IOUtils.toInputStream(content);
int index;
byte[] bytes = new byte[1024];
FileOutputStream downloadFile = new FileOutputStream("D:\\data\\a.docx");
while ((index = inputStream.read(bytes)) != -1) {
downloadFile.write(bytes, 0, index);
downloadFile.flush();
}
downloadFile.close();
inputStream.close();
File inputWord = new File("D:\\data\\1.xlsx");
// File outputFile = new File("D:\\data\\a.pdf");
try {
InputStream docxInputStream = new FileInputStream(inputWord);
// OutputStream outputStream = new FileOutputStream(outputFile);
IConverter converter = LocalConverter.builder().build();
ServletOutputStream outputStream = response.getOutputStream();
converter.convert(docxInputStream).as(DocumentType.XLSX).to(outputStream).as(DocumentType.PDF).execute();
docxInputStream.close();
outputStream.close();
inputWord.delete();
System.out.println("pdf转换成功");
} catch (Exception e) {
e.printStackTrace();
}
}
SpringBoot实现freemarker填充ftl格式,转Word和PDF 详情可以看我之前的文章:
SpringBoot实现freemarker填充ftl格式,转Word和PDF
原文链接:https://blog.csdn.net/The____wind/article/details/134039935