当前位置: 首页 > news >正文

Java——使用Aspose实现docx模板填充与导出word和pdf

文章目录

  • 前言
  • 项目版本
  • 模板准备
  • 测试代码块
    • 依赖引入
    • 各种文本填充
    • 几个中间类定义
      • 数据表对象定义
      • 中间存储类定义
    • 实际填充处理方法工具类
    • 导出效果
      • word
      • pdf

前言

本文主要说明使用Aspose将带有书签作为占位符的模板,进行数据的替换,同时将替换后的文本导出word、pdf文本类型。

项目版本

  • maven 3.6.3
  • jdk 17
  • Aspose 16.8.0

模板准备

创建一个xxx.docx的模板文件,在其中增加文本输入框表格等。并在其中制定对应的标签。
大致模板组成如下所示:
在这里插入图片描述
导出模板文件,并放置于项目的src/main/resources目录下,如下所示:
在这里插入图片描述

测试代码块

依赖引入

Aspose没有找到ali私服pom文件,目前采取项目中新建lib,在项目的pom.xml中进行引入。
在这里插入图片描述

<dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.8.0</version><scope>system</scope><systemPath>${project.basedir}/lib/aspose-words-16.8.0.jar</systemPath>
</dependency><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.10.4</version>
</dependency><!-- Md5 格式文件转换 依赖 -->
<dependency><groupId>org.commonmark</groupId><artifactId>commonmark</artifactId><version>0.21.0</version> <!-- 最新版本可更新 -->
</dependency>
<!-- 扩展支持(如表格、任务列表等非标准 MD 语法) -->
<dependency><groupId>org.commonmark</groupId><artifactId>commonmark-ext-gfm-tables</artifactId><version>0.21.0</version>
</dependency><!-- 工具类 主要使用其中base64转换,避免linux的乱字符 -->
<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId>
</dependency>

各种文本填充

一般情况下,富文本类型的文件有两种,htmlmd5。但是在进行带样式内容填充渲染,仅支持html格式的内容填充。
普通图片可以直接进行填充进入word文档中,但是针对富文本填充至标签空间中,图片样式仅支持 Base64

import com.aspose.words.Document;
import com.aspose.words.DocumentBuilder;
import com.aspose.words.License;
import enty.Users;
import utils.AsposeUtils;
import utils.WordToPdfUtil;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.*;public class AsposeTest {/*** 书签占用* @param args* @throws Exception*/public static void main(String[] args) throws Exception {// 加载证书 取数水印try {InputStream is = AsposeTest.class.getClassLoader().getResourceAsStream("licenses/license.xml");License asposeLic = new License();asposeLic.setLicense(is);} catch (Exception e) {throw new RuntimeException(e);}// 加载 Word 模板InputStream inWord = WordToPdfUtil.class.getClassLoader().getResourceAsStream("temp/11.docx");// 加载模板Document doc = new Document(inWord);// 文件构造器DocumentBuilder builder = new DocumentBuilder(doc);// 富文本(图片必须 base64)String fwb = "<p style=\"text-align: center;\"> &nbsp; " +"唐多令·芦叶满汀洲</p><p style=\"text-align: center;\"> &nbsp; " +"南宋·刘过 &nbsp;</p><p style=\"text-align: center;\"> &nbsp;" +"安远楼小集,侑觞歌板之姬黄其姓者,乞词于龙洲道人,为赋此《唐多令》。" +"同柳阜之、刘去非、石民瞻、周嘉仲、陈孟参、孟容。时八月五日也。</p>" +"<p style=\"text-align: center;\"> &nbsp;芦叶满汀洲,寒沙带浅流。" +"二十年重过南楼。柳下系船犹未稳,能几日,又中秋。</p>" +"<p style=\"text-align: center;\"> &nbsp;黄鹤断矶头,故人今在否?旧江山浑是新愁。<br/>" +"<a href=\"https://hanyu.baidu.com/hanyu-page/poem/detail?sid=d75b1cc88a094d5497bf0d3d5f6ac2ed&amp;from=aladdin&amp;pid=d75b1cc88a094d5497bf0d3d5f6ac2ed&amp;smp_names=termBrand2,poem1&amp;user_info%5Bun%5D=%E4%B8%BF%E7%A5%9E%E5%9F%9F%E7%81%AC%E6%88%98%E7%8B%BC&amp;user_info%5Buid%5D=849607069&amp;userid=849607069\" target=\"_blank\">欲买桂花同载酒,终不似,少年游</a>。" +//"<p>包含一张图片:<img src='src/main/resources/img/fish.png' /></p>" +"</p><p style=\"text-align: center;\">" +"<img src=\"data:image/png;base64,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\" alt=\"image 10@2x.png\" data-href=\"\" style=\"\"></p>";AsposeUtils.fillRichText(doc,builder,"Fwb1",fwb,true);// md5 格式的富文本填充String mdContent = "## 标题1\n" +"### 标题2\n" +"这只是一个`markdown`格式的**文本**\n" +"\n" +"列表\n" +"- 1、xxxx\n" +"- 2、MMMM\n" +"\n" +"[这只是一个链接](http://www.baidu.com)\n" +"\n" +"[![这只是一张图](https://cdn.nlark.com/lark/0/2018/png/11189/1533045871534-e64b8031-008c-4dfc-b6e8-12a597a003fb.png \"这只是一张图\")](undefined \"这只是一张图\")";// md5 格式的图片也不支持AsposeUtils.fillRichText(doc,builder,"Fwb_md5",mdContent,false);// 数据表(域)List<Object> usersList = Arrays.asList(new Users("xj1", 20, "男"), new Users("xj2", 18, "女"));AsposeUtils.fillListData(doc, usersList,"workerList");// 书签的形式// 转成map格式List<Map<String,String>> userMapLists = AsposeUtils.list2mapList(usersList);AsposeUtils.fillTable2(doc,builder,"bookmark_table",userMapLists);// 超链接AsposeUtils.fillHyperlink(doc, builder, "bookmark_hyperlink", "Aspose官网", "https://products.aspose.com/words/");// 图片InputStream inImg = WordToPdfUtil.class.getClassLoader().getResourceAsStream("img/fish.png");BufferedImage image = ImageIO.read(inImg);// 转换大小与格式BufferedImage bufferedImage = AsposeUtils.resizeBufferedImage(image, 50, 50, true);AsposeUtils.fillImage2(doc,builder, "logImg", bufferedImage);String out_file_base_path = "doc/"+ UUID.randomUUID();// worddoc.save(
http://www.dtcms.com/a/511086.html

相关文章:

  • Cef笔记:VS2019编译cef_109.0.5414
  • 云上极速转码:阿里云ECS+T4 GPU打造高性能FFmpeg视频处理引擎(部署指南)
  • Mysql 数据库迁移
  • 自建webrtc低延时分布式街机游戏直播方案
  • PHP四川文旅服务网站-计算机毕业设计源码76050
  • 从“开源开放”走向“高效智能”:阿里云 EMR 年度重磅发布
  • AI服务器工作之ubuntu系统下的驱动安装
  • 将跨平台框架或游戏引擎开发的 Windows 应用上架 Microsoft Store
  • 网站建立需要什么永久网站建设教程
  • 安装nginx
  • Leetcode+Java+图论+最小生成树拓扑排序
  • Unity画线功能LineRenderer详解附有案例
  • 从零部署自维护版 Uptime Kuma:Node.js + PM2 + Nginx 全链路实战指南
  • 哪个网站可以做纸箱沈阳市住房和城乡建设部网站
  • 腾讯送命题:手写多头注意力机制。。。
  • 信息传递视角下开源AI智能名片链动2+1模式S2B2C商城小程序对零售企业的赋能研究
  • AWS IoT Core 自动化巡检工具开发与实战报告
  • 【开题答辩过程】以《重庆市社区养老服务小程序设计与实现》为例,不会开题答辩的可以进来看看
  • 思淘网站建设网站域名证书
  • Substance Designer的通道合并(Channel Packing)自动化工作流
  • 【数据分析】基于R语言的宏基因组微生物群落下游数据的统计分析与可视化教程
  • TDE透明加密技术原理深度解析与文件在线安全传输实践指南
  • AI协作天花板!CherryStudio让多模型协同像搭积木
  • flash网站开发用什么语言wordpress 静态文件大
  • 小游戏引擎架构设计案例分析
  • [特殊字符] PM2 入门实战:从 0 到线上托管 React SPA
  • 指定位置打开 jupyter notebook
  • 设计模式-单例模式:从原理到实战的三种经典实现
  • 深度解析JVM GC调优实践指南
  • 决策规划仿真平台搭建