一、准备好模板

二、构架项目

1、pom依赖、注意aspose-words依赖官网收费可能拉不下来,需要私聊

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.7.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.pdf</groupId><artifactId>WordTransfromPdf</artifactId><version>0.0.1-SNAPSHOT</version><name>WordTransfromPdf</name><description>WordTransfromPdf</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.12</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.69</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.22</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.12</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.10.4</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.8.0</version></dependency><dependency><groupId>fakepath</groupId><artifactId>aspose-words</artifactId><version>20.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.1.20</version><exclusions><exclusion><artifactId>itextpdf</artifactId><groupId>com.itextpdf</groupId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

2、构建Controller


/*** @author kc* @date Create in  2022/10/26*/
@RestController
public class PdfController {@Autowiredprivate PdfService  pdfService;@RequestMapping("/downloadPdf")@ResponseBodypublic void downloadPreapprovalPdf( HttpServletResponse response) throws UnsupportedEncodingException {String pdfFileName = LocalDateTimeUtil.format(LocalDateTimeUtil.now(), "yyyyMMddHHmmss");response.setContentType("application/pdf");response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Headers", "content-type,x-requested-with,Authorization");response.setHeader("Access-Control-Expose-Headers", "Authorization,authenticated");response.setHeader("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, OPTIONS");response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("Content-Disposition", "inline; filename= " + URLEncoder.encode(pdfFileName, "UTF-8")+".pdf");OutputStream outputStream = null;try {outputStream = response.getOutputStream();outputStream.write(pdfService.generatePdf());outputStream.flush();}  catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {if (outputStream != null) {try {outputStream.flush();outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}}

3、service层

注意项:

1. 指定fsLocalPath存放缓存文件夹
2. AsposeWordPDF中需要指定字体库,windows字体库:C:\Windows\Fonts linux: /usr/share/fonts
(如果没指定字体库,生成pdf会出现中文都是小方格)

public interface PdfService {byte[] generatePdf();}@Service
public class PdfServiceImpl implements  PdfService{@Overridepublic byte[] generatePdf() {//缓存存放String  fsLocalPath="D:\\tmp";ClassPathResource resource = new ClassPathResource("wordTemplate/studentTemplate.docx");String docTemplateFile =  resource.getAbsolutePath();byte[] result = null;File tmpDocOutFile = null;File tmpPdfOutFile = null;try {tmpDocOutFile = File.createTempFile("SxzdPreapprovalReport", ".docx", new File(fsLocalPath));tmpPdfOutFile = File.createTempFile("SxzdPreapprovalReport", ".pdf", new File(fsLocalPath));LoopRowTableRenderPolicy loopRowPolicy = new LoopRowTableRenderPolicy();/*** 注意如果是集合元素一定要放入config*/Configure config = Configure.builder().bind("subjectList", loopRowPolicy).useSpringEL(false).build();List<SubjectResult> subjectList=new ArrayList<SubjectResult>();subjectList.add(new SubjectResult("数学","tom",132));subjectList.add(new SubjectResult("语文","jack",150));Map<String, Object> data = new HashMap<>();data.put("title", "张三基本信息");data.put("subjectList", subjectList);data.put("user", new User("张三","123","高一一班"));XWPFTemplate template = XWPFTemplate.compile(resource.getStream(), config).render(data);template.writeAndClose(new FileOutputStream(tmpDocOutFile));AsposeWordPDF.word2pdf(tmpDocOutFile.getAbsolutePath(), tmpPdfOutFile.getAbsolutePath());result = FileUtils.readFileToByteArray(tmpPdfOutFile);} catch (Exception e) {e.printStackTrace();} finally {FileUtils.deleteQuietly(tmpDocOutFile);FileUtils.deleteQuietly(tmpPdfOutFile);}return result;}
}

4、实体类

@Data
@AllArgsConstructor
public class User {private String userName;private String seqId;private String grade;
}
@Data
@AllArgsConstructor
//@NoArgsConstructor
public class SubjectResult {/*** 课程*/private String  subject;/*** 老师*/private String  teacher;/*** 分数*/private int score;
}

三、测试

1、字体库指定不正确示例

2、正确字体库示例

四、git地址

https://github.com/kangchangchang/WordTransfromPdf.git

java动态数据填充word转pdf相关推荐

  1. Java word动态数据填充并转为pdf最详细的讲解附带项目

    Java Word数据动态填充,并将word转为pdf 适用范围: 1.已有word模板,word中的一些数据需要动态生成. 2.word转为pdf 本文章讲解的内容是一个完整的适用流程.就是首先是一 ...

  2. Java导出数据到Word模板中

    Java导出数据到Word模板. 前言 网上的方案 需求介绍 模板 简介 使用体验 poi-tl Freemarker 操作步骤 总结 前言 相信很多人都会遇到Java导出的业务,Java导出主要有导 ...

  3. Java实现Excel和word转pdf加水印,复制及可用

    Java实现Excel和word转pdf加水印,复制及可用 时隔大半年,之前朋友,今天突然找我说,他们有个需求要做这东西.想起来之前自己照着官方文档写,也走了不少坑.今天就索性写个,也为了方便以后使用 ...

  4. Java使用Poi填充Word表格模板(图片和文字)

    Java使用Poi填充Word表格模板(图片和文字) **** 由于个人需求需要对表格模板进行操作,所以本文章只对表格进行替换数据操作,没有段落,没有循环遍历,没有延伸!!!!!(后续补充!!!) * ...

  5. Java使用aopse实现word转换pdf

    Java使用aopse实现word转换pdf 需要引用aspose包,引入操作我写了一个博客,地址如下 https://blog.csdn.net/weixin_46713508/article/de ...

  6. java 使用jacob实现word转pdf

    java 使用jacob实现word转pdf(IDEA Maven项目) 步骤: 一. 插件与jar包下载 SaveAsPDFandXPS 下载地址: http://www.microsoft.com ...

  7. python word 质检报告签字位置动态调整及word转PDF

    python word 质检报告签字位置动态调整及word转PDF 生成后,可以在线预览pdf格式的报告

  8. Java使用XDOC实现word,pdf等格式的生成及转换

    Java使用XDOC实现word,pdf等格式的生成及转换 最近业务上有个需求,要将生成的简报以word或者pdf等格式下载下来 刚开始我设想的是用io流的方法直接写,但是这样无疑是比较麻烦的 直到我 ...

  9. JAVA实现Freemarker生成动态数据的Word文档下载到浏览器

    使用的jar包版本:freemarker-2.3.28.jar 使用开发工具:idea 1. 创建模板: 新建一个word文档,打开后编辑成想要的格式 动态数据替换成${xxx},如果是多条集合用${ ...

最新文章

  1. 微信小程序在web-view页面做分享,并且把分享的参数传递给小程序
  2. NHibernate——Criteria条件查询
  3. 一步一步实现自己的模拟控件(5)——隐藏类
  4. 使用IntelliJ书签
  5. 如何把网址配置为http和https可以同时访问
  6. java生成html表格数据_使用Java将表格数据导出成Excel格式
  7. 在布局空间标注的尺寸量不对_CAD解决布局标注尺寸不对问题 及快捷键混乱问题...
  8. android studio 中禁用一个插件功能
  9. 3dsmax2021软件安装教程
  10. python运维开发_python运维开发
  11. 2022年系统分析师论文模拟题--押题
  12. java中前加加和后加加(精彩案例)
  13. 计算机网络第五版笔记
  14. 一文简要了解词义消歧与实体消歧
  15. 【观察】戴尔科技:未来企业的创新平台,数字中国的坚实底座
  16. 笔记本电脑用久了卡顿解决方法
  17. WEB开发技术蓝墨云第一次作业
  18. 文献阅读(182)Bufferless NoC
  19. iOS学习笔记-091.彩票06——我的彩票
  20. 工作/管理-生活方式:30个生活方式 : 教你如何让生活丰富多彩

热门文章

  1. thanks for your share
  2. MySQL数据库常用命令与SQL简介(一)
  3. 军哥高质量微信群开放了
  4. 从星际穿越的观影谈未来的思考
  5. Web API - day01【笔记+代码】
  6. 树梅派迅雷远程下载服务器搭建
  7. 关于邓白氏编码申请,这些步骤你不可不知
  8. Jboss EJB3.0实例教程
  9. 大数据工具——oozie调度
  10. 【狂神说】MySQL学习