基于itextpdf的java读取和更新pdf表单域字段值功能

news2024/12/24 0:17:14

基于itextpdf的java读取和更新pdf表单域字段值功能

执行结果为:
在这里插入图片描述

Hello World!
key=topmostSubform[0].Page1[0].qhjc[0]
key=topmostSubform[0].Page1[0].qhmc[0]
key=topmostSubform[0].Page1[0].cqzh[0]
key=topmostSubform[0].Page1[0].fm_year[0]
key=topmostSubform[0].Page1[0].nd[0]
key=topmostSubform[0].Page1[0].fm_day[0]
key=topmostSubform[0].Page1[0].fj[0]
key=topmostSubform[0].Page1[0].qt[0]
key=topmostSubform[0].Page1[0].bdcdyh[0]
key=topmostSubform[0].Page1[0].ywr[0]
key=topmostSubform[0].Page1[0].qlr[0]
key=topmostSubform[0].Page1[0].zmqlhsx[0]
key=topmostSubform[0].Page1[0].fm_month[0]
key=topmostSubform[0].Page1[0].zl[0]
key=topmostSubform[0].Page1[0].qrcode[0]
OK!
gitee.com

pom.xml中添加引用

<!-- pdf reader/writer-->
      <dependency>
          <groupId>com.itextpdf</groupId>
          <artifactId>itextpdf</artifactId>
          <version>5.5.13</version>
      </dependency>
      <!--pdf supert chinese text -->
      <dependency>
          <groupId>com.itextpdf</groupId>
          <artifactId>itext-asian</artifactId>
          <version>5.2.0</version>
      </dependency>

java代码:

package com.cwgis;

import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

//此类读取pdf文件中表单域,读取出字段列表  OK
public class test_pdf {

    public void updatePdf(String inputFileName, String outputFileName,Map<String, Object> data)
    {
        OutputStream os = null;
        PdfStamper ps = null;
        PdfReader reader = null;
        try
        {
            os = new FileOutputStream(new File(outputFileName));
            // 2 读入pdf表单
            reader = new PdfReader(inputFileName);
    
            // 3 根据表单生成一个新的pdf
            ps = new PdfStamper(reader, os);
            // 4 获取pdf表单
            AcroFields form = ps.getAcroFields();

            //显示表单中所有字段名称
            for(String key : form.getFields().keySet())
            {
                System.out.println("key="+key);
            }
    
            // 5给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示
            // BaseFont bf = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",
            // BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            // 方法二:使用iTextAsian.jar中的字体
            // BaseFont baseFont =
            // BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
            //BaseFont bf = BaseFont.createFont("d:/user/80004194/desktop/test/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            //form.addSubstitutionFont(bf);

            // 7遍历data 给pdf表单表格赋值
            for (String key : data.keySet()) {
                form.setField(key, data.get(key).toString());
            }
            ps.setFormFlattening(true);
            //System.out.println("===============PDF导出成功=============");
        } catch(Exception e)
        {
            //System.out.println("===============PDF导出失败=============");
            e.printStackTrace();
        } finally
        {
            try {
                ps.close();
                reader.close();
                os.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
   }

    public void updatePdf_test(String inputFileName, String outputFileName)
    {
        // 6查询数据================================================
        Map<String, Object> data = new HashMap<String, Object>();
            /*
            data.put("empName", "金星");
            data.put("empNumber", "束带结发看电视");           
            data.put("empDateOfIssue", "2019-12-3");
            data.put("empCertificateNo", "20190100833257");
            data.put("empApprovalNo_2019", "ZN-TP-CSS-20180002");
            data.put("empTrainingDate_2019", "2019-11-3");
            data.put("empCategory_2019", "初训");
            data.put("empResult_2019", "合格");
            data.put("empSignature_2019", "露西");
            data.put("answer", "张三");
            */

        data.put("zmqlhsx","zmqlhsx");
        data.put("ywr","ywr张三");
        //
        this.updatePdf(inputFileName,outputFileName,data);
    }

}

main代码:

test_pdf pdf=new test_pdf();
pdf.updatePdf_test("D:\\data\\pdf\\zszm_td.pdf","D:\\data\\pdf\\zszm_td_out.pdf");


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

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

相关文章

均匀分布的随机变量

如果连续型随机变量的概率密度满足如下公式&#xff1a; 那么就称在区间(a,b)上服从均匀分布&#xff0c;记为。

QWebEngineView 透明色 设置白屏闪烁的问题 已解决

在项目开发中。由于qt5.15 升级到qt6.5 不知道因为什么&#xff0c;QWebEngineView 加载出现白屏&#xff0c; 网上大神给的方案 五花八门&#xff0c;没有一个解决问题。 代码 旧代码QWebEngineView* pWebEngineView new QWebEngineView();//pWebEngineView->page()->…

phpstudy是什么?

PHPStudy 是一个集成环境工具&#xff0c;它将 PHP 开发所需的软件&#xff0c;如 Apache&#xff08;Web服务器&#xff09;、MySQL&#xff08;数据库服务器&#xff09;、PHP&#xff08;脚本语言&#xff09;等打包在一起&#xff0c;以便用户能够轻松安装和配置这些软件&a…

系列一、Linux中安装MySQL

一、Linux中安装MySQL 1.1、下载MySQL安装包 官网&#xff1a;https://dev.mysql.com/downloads/file/?id523327 我分享的&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/188_9RnBYlWVzFb_UJH5aaQ?pwdyyds 提取码&#xff1a;yyds 1.2、上传至/opt目录 & 解压…

NAT场景案例分析

目录 问题现象一 NAT Server故障排错思路 问题现象二 NAT Server问题 问题现象三 NAT Server问题 问题现象四 LAN-LAN映射 问题现象一 NAT Server故障排错思路 NAT Server故障排查思路&#xff08;出现配置端口映射后外网设备无法访问本地内网中的服务器的故障&#xff09…

【JavaEE】锁的策略

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

VG3225EFN压控晶体振荡器(VCXO)

5G脞2020年开始&#xff0c;商业服务正在全球范围内快速部署。5G通信网络需要保持高速率和可靠性&#xff0c;这2两者都需要低噪声&#xff0c;使用高频基模晶体振荡器&#xff08;高达50MHz&#xff09;&#xff0c;该晶体振荡器可以提供低相位噪声参考时钟&#xff0c;从而降…

EPICS asynPortDriver使用示例

在文本中&#xff0c;将展示如何将EPICS asyn模块和其他库联用&#xff0c;从而实现对arm单板机上GPIO口的控制。 在本例中使用到的硬件是&#xff1a; 在程序中需要厂家提供的wringPi库&#xff0c;才能通过C语言库函数调用实现对其GPIO的控制。 以下是这个单板机GPIO的管脚…

Linux Shell——(脚本参数传递)

脚本参数传递 一、参数传值二、脚本文件中特殊的变量 总结 最近学习了shell脚本&#xff0c;记录一下shell脚本参数传递相关语法 一、参数传值 执行脚本的时候&#xff0c;可以向脚本传递参数&#xff0c;脚本内获取参数的格式为$n n位置从1开始&#xff0c;$0 是脚本的文件名…

1.6 实战:Postman请求Get接口-获取用于登录的图形验证码

上一小节我们学习了Postman的布局,对Postman有了一个整体的认知,本小节我们就来实操一下Get接口。 我们打开Postman,点击我们之前创建的请求”获取登录页验证码“。我们在地址栏里填入获取登录页验证码的接口地址。怎么查看这个接口地址呢?我们打开校园二手交易系统,打开…

生成式AI的力量,释放RPA的无限潜能

回首即将过去的2023年&#xff0c;互联网行业似乎始终处在各种新概念的热潮激荡之中。其中&#xff0c;最引人注目的话题无疑是AI科技。自人工智能技术实现大规模突破以来&#xff0c;我们见证了一系列生成式AI的涌现。从ChatGPT到百度文心一言&#xff0c;它们纷纷登场&#x…

Python - 网络传输数据格式【字节流】传输优点及数据格式【字符,字典,字节,二进制,十六进制】的转换

一. 前言 在网络传输数据时&#xff0c;数据本质上是以二进制形式进行传输的。无论是传输字节还是传输二进制数据&#xff0c;最终都会转化为二进制进行传输。 所以&#xff0c;从传输速度的角度来看&#xff0c;无论是传输字节还是传输二进制数据&#xff0c;实际上是相同的…

OpenHarmony关于修改系统横屏导致启动视频显示不全问题解决

前言 OpenHarmony源码版本&#xff1a;4.0release 开发板&#xff1a;DAYU / rk3568 前段时间写的设置OpenHarmony启动视频&#xff0c;在竖屏状态下是正常的&#xff0c;但是横屏状态下显示不全。 链接直达&#xff1a;OpenHarmony 设备启动Logo和启动视频替换指南-CSDN博…

.net 洋葱模型

洋葱架构 内层部分比外层更抽象(内层接口&#xff0c;外层实现)。外层的代码只能调用内层的代码&#xff0c;内层的代码可以通过依赖注入的形式来间接调用外层的代码 简单的例子&#xff0c;引用依赖图 demo 接口类库 EmailInfo using System; using System.Collections.…

基于ssm一中体育馆管理系统的设计与实现论文

镇赉县一中体育馆管理系统的设计与实现 摘要 随着信息互联网购物的飞速发展&#xff0c;一般有能力的机构管理系统。本文介绍了镇赉县一中体育馆管理系统的开发全过程。通过分析企业对于镇赉县一中体育馆管理系统的需求&#xff0c;创建了一个计算机管理镇赉县一中体育馆管理…

瞳孔检测眼动追踪python实现(基于dlib)

效果展示&#xff1a; 原图&#xff1a;&#xff08;图片来自 b站up 借我300去洗牙&#xff09; dlib实现的特征点检测 瞳孔检测结果 完整代码&#xff1a; # encoding:utf-8import dlib import numpy as np import cv2def rect_to_bb(rect): # 获得人脸矩形的坐标信息x …

鸿蒙实操【ArkTS语言的运用】

ArkTS基础知识 使用声明式语法和组件化基础知识&#xff0c;搭建一个可刷新的排行榜页面。在排行榜页面中&#xff0c;使用循环渲染控制语法来实现列表数据渲染&#xff0c;使用Builder创建排行列表布局内容&#xff0c;使用装饰器State、Prop、Link来管理组件状态。最后我们点…

Linux Conda 安装 Jupyter

在Linux服务器Conda环境上安装Jupyter过程中遇到了无数的报错&#xff0c;特此记录。 目录 步骤一&#xff1a;安装Anaconda3 步骤二&#xff1a;配置Conda源 步骤三&#xff1a;安装Jupyter 安装报错&#xff1a;simplejson.errors.JSONDecodeError 安装报错&#xff1a;…

循环神经网络-1

目录 1 数据集构建 1.1 数据集的构建函数 1.2 加载数据并进行数据划分 1.3 构造Dataset类 2 模型构建 2.1 嵌入层 2.2 SRN层 2.3 线性层 2.4 模型汇总 3 模型训练 3.1 训练指定长度的数字预测模型 3.2 多组训练 3.3 损失曲线展示 4 模型评价 总结 参考文献 循环神经网络&…

VC++项目的32位、64位的配置和链接问题

新建一个项目&#xff0c;默认是x86配置&#xff1b; 添加包含目录、库目录&#xff0c;之后可以编译通过&#xff1b; 但是链接会出错&#xff0c;因为链接的dll是64位&#xff1b; 把项目配置改为x64&#xff1b; 需要把包含目录和库目录针对x64重新添加&#xff0c;否则会…