java动态数据填充word转pdf
一、准备好模板
二、构架项目
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相关推荐
- Java word动态数据填充并转为pdf最详细的讲解附带项目
Java Word数据动态填充,并将word转为pdf 适用范围: 1.已有word模板,word中的一些数据需要动态生成. 2.word转为pdf 本文章讲解的内容是一个完整的适用流程.就是首先是一 ...
- Java导出数据到Word模板中
Java导出数据到Word模板. 前言 网上的方案 需求介绍 模板 简介 使用体验 poi-tl Freemarker 操作步骤 总结 前言 相信很多人都会遇到Java导出的业务,Java导出主要有导 ...
- Java实现Excel和word转pdf加水印,复制及可用
Java实现Excel和word转pdf加水印,复制及可用 时隔大半年,之前朋友,今天突然找我说,他们有个需求要做这东西.想起来之前自己照着官方文档写,也走了不少坑.今天就索性写个,也为了方便以后使用 ...
- Java使用Poi填充Word表格模板(图片和文字)
Java使用Poi填充Word表格模板(图片和文字) **** 由于个人需求需要对表格模板进行操作,所以本文章只对表格进行替换数据操作,没有段落,没有循环遍历,没有延伸!!!!!(后续补充!!!) * ...
- Java使用aopse实现word转换pdf
Java使用aopse实现word转换pdf 需要引用aspose包,引入操作我写了一个博客,地址如下 https://blog.csdn.net/weixin_46713508/article/de ...
- java 使用jacob实现word转pdf
java 使用jacob实现word转pdf(IDEA Maven项目) 步骤: 一. 插件与jar包下载 SaveAsPDFandXPS 下载地址: http://www.microsoft.com ...
- python word 质检报告签字位置动态调整及word转PDF
python word 质检报告签字位置动态调整及word转PDF 生成后,可以在线预览pdf格式的报告
- Java使用XDOC实现word,pdf等格式的生成及转换
Java使用XDOC实现word,pdf等格式的生成及转换 最近业务上有个需求,要将生成的简报以word或者pdf等格式下载下来 刚开始我设想的是用io流的方法直接写,但是这样无疑是比较麻烦的 直到我 ...
- JAVA实现Freemarker生成动态数据的Word文档下载到浏览器
使用的jar包版本:freemarker-2.3.28.jar 使用开发工具:idea 1. 创建模板: 新建一个word文档,打开后编辑成想要的格式 动态数据替换成${xxx},如果是多条集合用${ ...
最新文章
- 微信小程序在web-view页面做分享,并且把分享的参数传递给小程序
- NHibernate——Criteria条件查询
- 一步一步实现自己的模拟控件(5)——隐藏类
- 使用IntelliJ书签
- 如何把网址配置为http和https可以同时访问
- java生成html表格数据_使用Java将表格数据导出成Excel格式
- 在布局空间标注的尺寸量不对_CAD解决布局标注尺寸不对问题 及快捷键混乱问题...
- android studio 中禁用一个插件功能
- 3dsmax2021软件安装教程
- python运维开发_python运维开发
- 2022年系统分析师论文模拟题--押题
- java中前加加和后加加(精彩案例)
- 计算机网络第五版笔记
- 一文简要了解词义消歧与实体消歧
- 【观察】戴尔科技:未来企业的创新平台,数字中国的坚实底座
- 笔记本电脑用久了卡顿解决方法
- WEB开发技术蓝墨云第一次作业
- 文献阅读(182)Bufferless NoC
- iOS学习笔记-091.彩票06——我的彩票
- 工作/管理-生活方式:30个生活方式 : 教你如何让生活丰富多彩