Word模板替换,并转PDF格式输出

news2024/7/4 5:26:00

Poi-tl参考文档地址:http://deepoove.com/poi-tl/1.8.x/#hack-loop-table

word模板替换,转pdf

    • 1. 依赖引入:
    • 2. word模板配置:
    • 3. 示例demo:
    • 4 . 效果图

1. 依赖引入:

  <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>4.1.2</version>
  </dependency>

  <dependency>
      <groupId>com.aspose</groupId>
      <artifactId>aspose-words</artifactId>
      <version>18.2</version>
      <classifier>jdk16</classifier>
  </dependency>

  <dependency>
      <groupId>com.deepoove</groupId>
      <artifactId>poi-tl</artifactId>
      <version>1.8.2</version>
  </dependency>

<!-- 通过Maven库拿不到,就加下面的配置 -->
<repositories>
     <repository>
         <id>AsposeJavaAPI</id>
         <name>Aspose Java API</name>
         <url>https://repository.aspose.com/repo/</url>
     </repository>
 </repositories>
 <pluginRepositories>
     <pluginRepository>
         <id>AsposeJavaAPI</id>
         <url>https://repository.aspose.com/repo/</url>
     </pluginRepository>
 </pluginRepositories>

2. word模板配置:

        绿色部分是直接渲染的,对应map中的key-value,蓝色部分是绑定collections对象,进行遍历循环集合数据
在这里插入图片描述

3. 示例demo:

public static void main(String[] args) throws Exception {
       public static void main(String[] args) throws Exception {
        ByteArrayOutputStream docOutput = new ByteArrayOutputStream();

        Map<String, Object> map = new HashMap<>(3);
        map.put("zfkp", "AAAA");
        map.put("kpjg", "123");
        map.put("kpr", "李四");

        List<Map> list = new ArrayList<>();
        Map<String, Object> map1 = new HashMap<>(3);
        map1.put("number", 1);
        map1.put("kprlist", "xxxa");
        map1.put("fs", 17);
        Map<String, Object> map2 = new HashMap<>(3);
        map2.put("number", 2);
        map2.put("kprlist", "xxxa3aa");
        map2.put("fs", 10);
        list.add(map1);
        list.add(map2);
        //列表集合数据
        map.put("collections", list);

        HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();
        Configure config = Configure.newBuilder()
                //绑定集合数据
                .bind("collections", policy).build();

        System.out.println(map);
        //加载配置的word模板
        XWPFTemplate template = XWPFTemplate.compile("C:\\Users\\DELL\\Desktop\\kpwtlb.docx", config);

        template.render(map);
        //写入word,swapStream可输出word文档
        template.write(docOutput);
        ByteArrayInputStream swapStream = new ByteArrayInputStream(docOutput.toByteArray());

        //word转PDF
        Document doc = new Document(swapStream);
        ByteArrayOutputStream pdfOutput = new ByteArrayOutputStream();
        doc.save(pdfOutput, SaveFormat.PDF);

        ByteArrayInputStream pdfinput = new ByteArrayInputStream(pdfOutput.toByteArray());
        FileUtil.inputStreamToFile(pdfinput, "C:\\Users\\DELL\\Desktop\\", "123.pdf");
    }

4 . 效果图

        转换的pdf有水印,去水印很方便, 加载License(要买)即可 封装一个工具类
https://blog.csdn.net/weixin_42827159/article/details/105031663
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/695451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity3D:在 Inspector 中操作

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 在 Inspector 中操作 本页面描述了一些用于控制 Inspector 窗口本身的选项。有关设置游戏对象、脚本和资源的属性的信息&#xff0c;请参阅编辑属性。 Lock the Inspector 通常&…

网络安全零基础学习路线

一&#xff0c;怎么入门&#xff1f; 1、Web 安全相关概念&#xff08;2 周&#xff09; 了解网络安全相关法律法规 熟悉基本概念&#xff08;SQL 注入、上传、XSS、CSRF、一句话木马等&#xff09;。 通过关键字&#xff08;SQL 注入、上传、XSS、CSRF、一句话木马等&#…

C. Robot Collisions(暑期集训)

原题链接 题意&#xff1a; 有n个机器人在OX轴上运动&#xff0c;运动范围为[0,m]。 第i个机器人开始位于xi的位置&#xff0c;然后以1单位距离每秒的速度向左或向右运动&#xff0c;当其运动到0点或m点时会调转方向。 如果任意时刻多于一个机器人在同一整数位置&#xff0c;…

【硬件自动化测试--测试软件的设计及实现】测试框架设计及实现!

如何设计并实现自动化框架? 首先,需要了解我们的产品,需要做哪些测试,如有很多硬件产品的测试中,需要用到示波器、频谱仪、信号源等等一系列的仪器,仪器的型号也各有不同,所以在设计框架之前,一定得了解我们的产品。 那么,就以一台服务器为例子,基带部分的测试,包括…

酷开系统 |酷开科技持续创造大屏生命力

在这个信息爆炸的时代&#xff0c;人们对于互联网和智能生活的需求&#xff0c;不再局限于碎片化或工作场景&#xff0c;更多的是延伸至连续化的家庭化使用环境。而智能大屏作为互联网时代下的产物&#xff0c;融合了互联网流媒体的数据处理方式&#xff0c;深受年轻人的青睐&a…

牛客·矩阵取数游戏

矩阵取数游戏 这里我们推一下这个题的精髓&#xff1a; dp[i][j]max(int(b[c][i])dp[i1][j],dp[i][j-1]int(b[c][j])) dp[i][j]2*dp[i][j]假定某一行有两个数x,y; 那么我们有两种选择&#xff1a; 先拿x&#xff0c;再拿y&#xff1a;x*2y*4&#xff1b; 先拿y&#xff0c;再…

Rust in Action笔记 第八章 网络

P253的图展示了网络各层用到的协议Box<dyn std::error::Error>表示一个指针指向的实现了标准错误库的类型&#xff0c;dyn表明这是一个特征对象&#xff08;trait object&#xff09;&#xff0c;是rust里多态的一种实现方式&#xff1b;特征对象和模板对象&#xff08;g…

短视频------Adobe Photoshop 笔记总结

一、Adobe Photoshop 使用方式方法 ctrlc/v 复制 粘贴 ctrlx 剪切 ctrla 全选 ctrlz撤销 ctrls保存 ENTER 回车 换行 CTRL 调取定界框 CAPSLOCK 大写锁定 Esc 退出 Delete 删除 Backspace 退格 Ctrl shi alt 三个控制键 Shi 连选 ctrl 加选/减选 锁屏 WinL 打开运行命令窗口 …

vue实现输入网址生成二维码、解码、下载、更改功能

功能&#xff1a; 1.输入网址生成二维码 2.二维码可以下载 3.可以更改二维码中心的图片 4.可以通过本地相册的二维码进行解码 1.下载三个插件 下载vue-qr&#xff0c;用于生成二维码 npm install vue-qr 下载vue-jimp并指定版本号&#xff0c;最新版不行&#xff0c;实…

Linux中yum、dnf、rpm

yum 1、看是否安装了某些东西 yum list all | grep php

一篇文章带你从入门都入土 Kafka 消息中间件(原理+代码)

目录 一、Kafka定义 二、消息队列 三、Kafka基础架构图 四、安装Kafka 4.1 为每台服务器下载Kafka并解压 4.2 查看目录结构 4.3 为每台服务器修改配置文件server.properties 4.4 为每台服务器配置Kafka环境变量 4.5 启动zookeeper集群 4.6 启动Kafka集群 4.7 关闭Ka…

IDEA初次连接Redis配置

解决IDEA报错代码&#xff1a;redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host 192.168.127.185:6379 第一步、引入jedis依赖 <!--引入jedis依赖--> <dependencies><dependency><groupId>redis.clients</gr…

天数智芯通用GPU产品天垓100与飞桨完成III级兼容性测试,加速人工智能产业生态建设

近日&#xff0c;上海天数智芯半导体有限公司&#xff08;以下简称“天数智芯”&#xff09;通用 GPU 产品天垓 100 与飞桨已完成 III 级兼容性测试。测试结果显示&#xff0c;双方兼容性表现良好&#xff0c;整体运行稳定。这是天数智芯加入“飞桨硬件生态共创计划 ”后的阶段…

Tensor core原理

什么是Tensorcore Tensor core是nvidia底层执行运算的硬件单元&#xff0c;不同于nvidia以往的cuda core(全浮点型&#xff09;&#xff0c;Tensor core是近几年推出来的、混合精度的、将累加和累乘放在一起的计算硬件&#xff1b; 什么是混合精度 混合精度指的是在输入、输…

电脑出现0xC1900101错误怎么办?

在更新或安装Windows操作系统时&#xff0c;有时系统会提示出现了0xC1900101错误。这个错误的出现通常是源于与驱动程序相关的错误所致。那么当电脑出现0xC1900101错误时该怎么办呢&#xff1f; 为什么会出现错误代码0xC1900101&#xff1f; 通常情况下&#xff0c;有以下几个…

Java重点:反射机制的使用

目录 一、概念 二、类类 1、类类的获取方式 1&#xff09;类名.Class 2&#xff09;对象.getClass() 3&#xff09;Class.forName() 三、反射实例化 1、调用一个公有的无参构造方法 2、调用一个公有的一个参构造方法 3、调用一个公有的两个参构造方法 4、调用一个私有…

gitee(码云)如何生成并添加公钥

一&#xff0c;简介 在使用Gitee的时候&#xff0c;公钥是必须的&#xff0c;无论是克隆还是上传。本文主要介绍如何本地生成和添加公钥到服务器。供参考。 二&#xff0c;步骤介绍 2.1 本地生成公钥 打开git bash 输入以下代码回车三次&#xff1a; # 替换为你自己的邮箱…

opencv特征检测 HOG特征算法

1 HOG特征简介 Hog 算法的工作原理是创建图像中梯度方向分布的柱状图&#xff0c;然后以一种非常特殊的方式对其进行归一化。这种特殊的归一化使得Hog 能够有效地检测物体的边缘&#xff0c;即使在对比度很低的情况下也是如此。这些标准化的柱状图被放在一个特征向量&#xff…

51单片机的数字时钟系统【含仿真+程序+报告】

51单片机的数字时钟系统【含仿真程序报告】 1、 系统组成2、功能概述3、仿真4、程序代码5、报告6、资源链接 1、 系统组成 该系统由AT89C51单片机DS1302时钟模块按键模块DS18B20LCD显示模块构成。 2、功能概述 可显示实时的日期 包括 年-月-日 时分秒 星期 农历时间DS18B20室…

将图像2D转换为3D--LeiaPix Converter

LeiaPix Converter是一款免费的在线图像处理工具&#xff0c;可帮助用户将2D图像实时转换为精美的3D光场图像。 它使用由Leia开发的专有算法&#xff0c;为照片、插画和艺术作品等2D图像添加深度和立体感&#xff0c;目前是完全免费的。 LeiaPix Converter 的特点 多格式转换…