Java使用AsposePDF和AsposeWords进行表单填充

news2024/11/15 13:52:18

声明:本文为作者Huathy原创文章,禁止转载、爬取!否则,本人将保留追究法律责任的权力!

文章目录

  • AsposePDF填充表单
    • adobe pdf表单准备
    • 引入依赖
    • 编写测试类
  • AsposeWord表单填充
    • 表单模板准备与生成效果
    • 引入依赖
    • 编码
  • 参考文档

AsposePDF填充表单

adobe pdf表单准备

参考文档:Adobe创建和分发 PDF 表单
我们使用:adobe的Adobe Acrobat DC来编辑PDF准备表单,首先打开PDF,点击更多工具,点击准备表单,添加文本域。

在这里插入图片描述

在这里插入图片描述

引入依赖

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-pdf</artifactId>
    <version>21.11</version>
</dependency>

编写测试类

package com.hx.pdf;

import cn.hutool.core.date.DateUtil;
import com.aspose.pdf.facades.DocumentPrivilege;
import com.aspose.pdf.facades.PdfFileSecurity;

import java.util.Date;

/**
 * @author Huathy
 * @version 1.0
 * @description: TODO
 * @date 2024/7/21 10:55
 */
public class PdfTest1 {
    public static void main(String[] args) {
        fillPdfText();
    }

    private static void fillPdfText() {
        //导入必要的类
        //打开现有的 PDF 文档
        com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("E:\\temp\\表单模板.pdf");
        //通过名称访问表单字段
        com.aspose.pdf.TextBoxField textBoxField = (com.aspose.pdf.TextBoxField) pdfDocument.getForm().get("name");
        //设置表单字段的值
        textBoxField.setValue("Huathy");
        //通过名称访问表单字段
        com.aspose.pdf.TextBoxField textBoxField1 = (com.aspose.pdf.TextBoxField) pdfDocument.getForm().get("date");
        //设置表单字段的值
        textBoxField1.setValue(DateUtil.formatDate(new Date()));
        //通过名称访问表单字段
        com.aspose.pdf.TextBoxField textBoxField2 = (com.aspose.pdf.TextBoxField) pdfDocument.getForm().get("time");
        //设置表单字段的值
        textBoxField2.setValue(DateUtil.formatTime(new Date()));
        // 填充后禁止编辑
        PdfFileSecurity fileSecurity = new PdfFileSecurity(pdfDocument);
        fileSecurity.setPrivilege(DocumentPrivilege.getForbidAll());
        //保存修改后的PDF
        pdfDocument.save("E:\\temp\\填充表单模板.pdf");
    }
}

AsposeWord表单填充

表单模板准备与生成效果

使用word邮件合并
在这里插入图片描述
效果
在这里插入图片描述

引入依赖

 <dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-words</artifactId>
    <version>20.3</version>
</dependency>

编码

package com.hx.word;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import com.aspose.words.Document;
import com.aspose.words.DocumentBuilder;
import com.aspose.words.License;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Huathy
 * @version 1.0
 * @description: TODO
 * @date 2024/7/21 10:55
 */
public class WordTest1 {
    /*
     * 加载 license
     * 由于 aspose是收费的,若没有 license,则会出现水印。
     */
    static {
        try {
            String license =
                    "<License>\n" +
                            "  <Data>\n" +
                            "    <Products>\n" +
                            "      <Product>Aspose.Cells for Java</Product>\n" +
                            "      <Product>Aspose.Words for Java</Product>\n" +
                            "      <Product>Aspose.Slides for Java</Product>\n" +
                            "    </Products>\n" +
                            "    <EditionType>Enterprise</EditionType>\n" +
                            "    <SubscriptionExpiry>yyyyMMdd</SubscriptionExpiry>\n" +
                            "    <LicenseExpiry>yyyyMMdd</LicenseExpiry>\n" +
                            "    <SerialNumber>UUID</SerialNumber>\n" +
                            "  </Data>\n" +
                            "  <Signature>Huathy</Signature>\n" +
                            "</License>";
            new License().setLicense(new ByteArrayInputStream(license.getBytes("UTF-8")));
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("自动加载aspose证书文件失败!");
        }
    }

    public static void main(String[] args) throws Exception {
        fillWordText();
    }

    private static void fillWordText() throws Exception {
        // Create a new Word document
        Document doc = new Document("E:\\temp\\表单模板.docx");
        // Adding text to the document
        DocumentBuilder builder = new DocumentBuilder(doc);

        String text = "\t\t贵单位,由于XXX问题存在安全隐患,请贵单位及时整改!\n" +
                "\t 测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测测试测试测试试" +
                "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试\n" +
                " \t并将整改报告汇报给我单位验收!";
        Map<String, String> toData = new HashMap<String, String>() {{
            put("org", "测试单位");
            put("text", text);
            put("date", DateUtil.formatDateTime(new Date()));
        }};
        String[] fieldNames = new String[toData.size()];
        String[] values = new String[toData.size()];
        int i = 0;
        for (Map.Entry<String, String> entry : toData.entrySet()) {
            fieldNames[i] = entry.getKey();
            values[i] = entry.getValue();
            i++;
        }
        doc.getMailMerge().execute(fieldNames, values);
        // Save the document
        doc.save("E:/temp/output202407.docx");
    }
}

参考文档

使用 Java 填充 PDF 文档中的表单字段
使用 Java 在 MS Word 文档中合并邮件

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

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

相关文章

Java | Leetcode Java题解之第275题H指数II

题目&#xff1a; 题解&#xff1a; class Solution {public int hIndex(int[] citations) {int n citations.length;int left 0, right n - 1;while (left < right) {int mid left (right - left) / 2;if (citations[mid] > n - mid) {right mid - 1;} else {lef…

【Hot100】LeetCode—322. 零钱兑换

目录 题目1- 思路2- 实现⭐322. 零钱兑换——题解思路 3- ACM 实现 题目 原题连接&#xff1a;322. 零钱兑换 1- 思路 思路 其中 amount 是背包容量 ——> 其中 nums 数组代表的背包重量 2- 实现 ⭐322. 零钱兑换——题解思路 class Solution {public int coinChange(in…

计算机网络基础:3.DNS服务器、域名分类

一、DNS服务器 DNS服务器在网络中的作用类似于餐厅中的“顾客座位对照表”&#xff0c;它帮助前台&#xff08;路由器&#xff09;将顾客&#xff08;用户&#xff09;的请求转发到正确的餐桌&#xff08;目标设备&#xff09;。 (1)概念与原理 DNS的基本概念 DNS&…

构建智慧农业监管系统:架构设计与技术创新

随着农业现代化的推进和消费者对食品安全的关注增加&#xff0c;智慧农业监管系统的设计变得至关重要。本文将探讨如何利用先进的技术和创新的系统架构&#xff0c;确保农产品生产过程的透明性、安全性和合规性&#xff0c;为农业发展注入新的动力和保障。 ### 1. 系统架构概述…

信息收集Part3-资产监控

Github监控 便于收集整理最新exp或poc 便于发现相关测试目标的资产 各种子域名查询 DNS,备案&#xff0c;证书 全球节点请求cdn 枚举爆破或解析子域名对应 便于发现管理员相关的注册信息 通过Server酱接口接收漏洞信息 https://sct.ftqq.com/ https://github.com/easych…

go中map

文章目录 Map简介哈希表与Map的概念Go语言内建的Map类型Map的声明Map的初始化Map的访问Map的添加和修改Map的删除Map的遍历 Map的基本使用Map的声明与初始化Map的访问与操作Map的删除Map的遍历Map的并发问题实现线程安全的Map 3. Map的访问与操作3.1 访问Map元素代码示例&#…

生成树协议配置与分析

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、相关知识 1、生成树协议简介 生成树协议&#xff08;STP&#xff09;是一种避免数据链路层逻辑环路的机制&#xff0c;它通过信息交互识别环路并…

C语言刷题小记2

前言 本篇博客还是为大家分享一些C语言的OJ题目&#xff0c;如果你感兴趣&#xff0c;希望大佬一键三连。多多支持。下面进入正文部分。 题目1竞选社长 分析&#xff1a;本题要求我们输入一串字符&#xff0c;并且统计个数的多少&#xff0c;那么我们可以通过getchar函数来获…

Adaboost集成学习 | Matlab实现基于LSTM-Adaboost长短期记忆神经网络结合Adaboost集成学习多输入单输出时间序列预测

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习 | Matlab实现基于LSTM-Adaboost长短期记忆神经网络结合Adaboost集成学习时间序列预测(股票价格预测) 模型设计 步骤1: 数据准备 收集和整理历史数据。确保数据集经过适当的预处理,如归一…

【数据结构初阶】一篇文章带你超深度理解【单链表】

hi &#xff01; 目录 前言&#xff1a; 1、链表的概念和结构 2、单链表&#xff08;Single List&#xff0c;简写SList&#xff09;的实现 2.1 定义链表&#xff08;结点&#xff09;的结构 2.2 创建一个链表 2.3 打印链表 2.4 尾插 2.5 头插 2.6 尾删 2.7 头…

Aigtek高压放大器指标参数要求及其应用

高压放大器是一类特殊的放大器&#xff0c;其主要功能是将输入的低电压信号放大为输出的高电压信号。在各种应用中&#xff0c;如音频放大、通信系统、医学设备等&#xff0c;高压放大器都扮演着至关重要的角色。为了确保高压放大器能够满足实际应用的需求&#xff0c;并且具有…

Redis持久化和集群模式

目录 1、什么是持久化&#xff1f; 2、Redis实现持久化的方式 3、RDB&#xff08;Redis DataBase&#xff09;快照模式 3.1 手动触发 3.1.1 save 3.1.2 bgsave 3.2 自动触发 4、AOF&#xff08;append only File&#xff09;日志追加模式 4.1 开启aof 4.2 RBD和AOF的区…

mysql JSON特性优化

有朋友问到&#xff0c;mysql如果要根据json中的某个属性过滤&#xff0c;数据量大的话&#xff0c;性能很差&#xff0c;要如何提高性能&#xff1f; 为什么要用json串&#xff1f; 由于一些特定场景&#xff0c;mysql需要用到json串&#xff0c;例如文档&#xff0c;不同的…

【Matlab 传感器布局优化】基于群智能算法的wsn覆盖优化研究

一 背景介绍 无线传感器网络&#xff08;Wireless Sensor Network, WSN&#xff09;作为远程环境监测系统应用的关键技术&#xff0c;能够在有限的能源供应下提供高效的传感和通信服务。覆盖控制是保证高效通信和可靠数据传输的重要手段。鉴于复杂的物理环境限制了节点部署方式…

《JavaEE篇》--多线程(2)

《JavaEE篇》--多线程(1) 线程安全 线程不安全 我们先来观察一个线程不安全的案例&#xff1a; public class Demo {private static int count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() -> {//让count自增5W次…

zabbix“专家坐诊”第247期问答

问题一 Q&#xff1a;乐维MCM免费版还需要再单独安装一个Zabbix连接么&#xff1f; A&#xff1a;估计是perseusZ_server服务进程因为重复安装导致服务挂了。试下能不能启动起来&#xff1f;service perseusZ_server status Q&#xff1a;正常启动的&#xff0c;页面刷新了还…

谷粒商城实战笔记-50-51-商品分类的删除

文章目录 一&#xff0c;50-商品服务-API-三级分类-删除-逻辑删除1&#xff0c;逻辑删除的配置1.1 配置全局的逻辑删除规则&#xff08;可省略&#xff09;1.2 配置逻辑删除Bean&#xff08;可省略&#xff09;1.3 Bean相应字段上加上注解TableLogic 2&#xff0c;后台接口开发…

力扣高频SQL 50题(基础版)第十题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第十题1661. 每台机器的进程平均运行时间题目说明思路分析实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第十题 1661. 每台机器的进程平均运行时间 题目说明 表: Activity…

数里行间创始人郭振:AIGC如何打造跨境电商增长新引擎

导读&#xff1a;在跨境电商领域&#xff0c;AI客服已经能够实现50%的问题平均解决率和不低于人工标准的客户满意度。 在生成式AI的商业化应用领域&#xff0c;跨境电商行业一直走在前列&#xff0c;成为最早实现技术落地的先锋之一。 “我们的AI客服机器人&#xff0c;已经帮助…

01 MySQL

文章目录 MySQL1、数据库相关概念2、MySQL3、SQL概述4、DDL:数据库操作5、DDL:表操作6、DML7、DQL8、约束9、数据库设计10、多表查询11、事务 MySQL 1、数据库相关概念 数据库 &#xff08;1&#xff09;存储和管理数据的仓库&#xff0c;数据是有组织的进行存储。 &#xff0…