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

spring boot itext7 修改生成文档的作者、制作者、标题,并且读取相关的信息。

1、官方的example文件:iText · GitHub

itext-java-7.2.5\kernel\src\test\java\com\itextpdf\kernel\pdf\PdfStampingTest.java

2、修改代码:

@Testpublic void stamping1() throws IOException {String filename1 = destinationFolder + "stamping1_1.pdf";String filename2 = destinationFolder + "stamping1_2.pdf";PdfDocument pdfDoc1 = new PdfDocument(new PdfWriter(filename1));pdfDoc1.getDocumentInfo().setAuthor("Alexander Chingarev").setCreator("iText 6").setAuthor("aaaaaaaaaaaa").setKeywords("123").setProducer("abcdefghijklmkuyvklfsdklsdfjksdfj").setSubject("kldsjf").setTrapped(new PdfName("hellksdl")).setTitle("Empty iText 6 Document");PdfPage page1 = pdfDoc1.addNewPage();page1.getContentStream(0).getOutputStream().write(ByteUtils.getIsoBytes("%Hello World\n"));page1.flush();pdfDoc1.close();PdfReader reader2 = new PdfReader(filename1);PdfWriter writer2 = new PdfWriter(filename2);PdfDocument pdfDoc2 = new PdfDocument(reader2, writer2);pdfDoc2.getDocumentInfo().setCreator("iText 7").setTitle("Empty iText 7 Document");pdfDoc2.close();PdfReader reader3 = new PdfReader(filename2);PdfDocument pdfDoc3 = new PdfDocument(reader3);for (int i = 0; i < pdfDoc3.getNumberOfPages(); i++) {pdfDoc3.getPage(i + 1);}assertEquals("Rebuilt", false, reader3.hasRebuiltXref());assertEquals("Fixed", false, reader3.hasFixedXref());verifyPdfPagesCount(pdfDoc3.getCatalog().getPageTree().getRoot().getPdfObject());pdfDoc3.close();PdfReader reader = new PdfReader(destinationFolder + "stamping1_2.pdf");PdfDocument document = new PdfDocument(reader);assertEquals("Rebuilt", false, reader.hasRebuiltXref());PdfDictionary trailer = document.getTrailer();PdfDictionary info = trailer.getAsDictionary(PdfName.Info);PdfString creator = info.getAsString(PdfName.Creator);assertEquals("iText 7", creator.toString());byte[] bytes = document.getPage(1).getContentBytes();assertEquals("%Hello World\n", new String(bytes));String date = document.getDocumentInfo().getPdfObject().getAsString(PdfName.ModDate).getValue();Calendar cl = PdfDate.decode(date);double diff = DateTimeUtil.getUtcMillisFromEpoch(null) - DateTimeUtil.getUtcMillisFromEpoch(cl);String message = "Unexpected creation date. Different from now is " + (float) diff / 1000 + "s";assertTrue(message, diff < 5000);document.close();}

3、我们来看一下生成的pdf中的信息如何显示的:

我们发现这里面的信息,已成功的被修改了。

4、读取相关信息:

PdfReader reader = new PdfReader(destinationFolder + "stamping1_1.pdf");PdfDocument document = new PdfDocument(reader);assertEquals("Rebuilt", false, reader.hasRebuiltXref());PdfDictionary trailer = document.getTrailer();PdfDictionary info = trailer.getAsDictionary(PdfName.Info);PdfString creator = info.getAsString(PdfName.Creator);System.out.println(creator.toString());System.out.println(info.toString());System.out.println(info.getAsString(PdfName.Title));System.out.println(info.getAsString(PdfName.Producer));assertEquals("iText 7", creator.toString());byte[] bytes = document.getPage(1).getContentBytes();assertEquals("%Hello World\n", new String(bytes));String date = document.getDocumentInfo().getPdfObject().getAsString(PdfName.ModDate).getValue();Calendar cl = PdfDate.decode(date);double diff = DateTimeUtil.getUtcMillisFromEpoch(null) - DateTimeUtil.getUtcMillisFromEpoch(cl);String message = "Unexpected creation date. Different from now is " + (float) diff / 1000 + "s";assertTrue(message, diff < 5000);document.close();

我们会发现Console都输出来了。

相关文章:

spring boot itext7 修改生成文档的作者、制作者、标题,并且读取相关的信息。

1、官方的example文件&#xff1a;iText GitHub itext-java-7.2.5\kernel\src\test\java\com\itextpdf\kernel\pdf\PdfStampingTest.java 2、修改代码&#xff1a; Testpublic void stamping1() throws IOException {String filename1 destinationFolder "stamping1_…...

LeetCode题练习与总结:灯泡开关--319

一、题目描述 初始时有 n 个灯泡处于关闭状态。第一轮&#xff0c;你将会打开所有灯泡。接下来的第二轮&#xff0c;你将会每两个灯泡关闭第二个。 第三轮&#xff0c;你每三个灯泡就切换第三个灯泡的开关&#xff08;即&#xff0c;打开变关闭&#xff0c;关闭变打开&#x…...

ClickFix攻击活动升级:可通过虚假谷歌会议画面传播恶意软件

最近&#xff0c;研究人员报告了一种新的 ClickFix 攻击活动&#xff0c;主要通过诱骗用户访问显示虚假连接错误的欺诈性 谷歌会议的页面&#xff0c;继而借此传播信息窃取恶意软件&#xff0c;主要针对 Windows 和 macOS 操作系统。 ClickFix是网络安全公司Proofpoint在5月份…...

迷茫!能走出迷茫?

我今年40有余&#xff0c;因资质平庸&#xff0c;及特殊的个人经历&#xff0c;仍奋斗在一线。上班近二十年&#xff0c;两件事对我人生走向影响最大&#xff0c;编程和炒股。 下个月要去一家新公司上班。今天算是在现公司工作交接的最后时段。在这家公司干了接近一年&#xff…...

6.2 遍历重定位表

本节我们将编写一个遍历重定位表的示例程序&#xff0c;打印重定位表。 本节必须掌握的知识点&#xff1a; 遍历重定位表 6.2.1 遍历重定位表 实验四十三&#xff1a;遍历重定位表 以下代码实现打印"c:\\notepad64.exe"进程重定位表的所有信息。 /*--------------…...

面对服务器掉包的时刻困扰,如何更好的解决

在数字化时代&#xff0c;服务器的稳定运行是企业业务连续性的基石。然而&#xff0c;服务器“掉包”现象&#xff0c;即数据包在传输过程中丢失或未能正确到达目的地的情况&#xff0c;却时常成为IT运维人员头疼的问题。它不仅影响用户体验&#xff0c;还可能导致数据不一致、…...

RTSP流图片采样助手(yolov5)

在监控和视频分析领域&#xff0c;实时采样视频流中的图像数据是十分重要的。本文将介绍一个基于Python和Tkinter构建的RTSP流图片采样助手的设计与实现&#xff0c;旨在简化RTSP流的采样过程&#xff0c;并支持根据用户定义的特殊标签进行筛选。 项目概述 该项目的主要功能包…...

MySQL、MariaDB、OceanBase远程异地定时备份脚本

问题背景 公司需要在异地机房远程备份数据库&#xff0c;以防止数据丢失&#xff0c;同时要支持MySQL、MariaDB和OceanBase。由于MariaDB和OceanBase支持MySQL语法&#xff0c;所以可以直接用MySQL Client进行备份。 安装MySQL客户端 yum install mysql编写脚本 编写/backu…...

【远程监控新体验】OpenObserve结合内网穿透无公网IP远程访问全攻略

文章目录 前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动OpenObserve容器4. 本地访问测试5. 公网访问本地部署的OpenObserve5.1 内网穿透工具安装5.2 创建公网地址6. 配置固定公网地址前言 本文主要介绍如何在Linux系统使用Docker快速本地化部署OpenObserve云原生可观…...

深度学习:异常检测(Anomaly Detection)详解

异常检测&#xff08;Anomaly Detection&#xff09;详解 异常检测&#xff0c;也称为离群点检测&#xff0c;是一种用于识别在数据中显著偏离正常行为或预期模式的数据点的技术。这些异常数据点可能代表系统错误、欺诈行为、网络入侵或任何其他重要且通常需要进一步调查的现象…...

智慧公厕系统提升公共服务满意度

在现代城市化进程中&#xff0c;公共服务体系的完善与提升成为了政府和社会各界的重要任务。作为公共厕所这样一个普遍而基础的市政设施&#xff0c;其服务质量直接影响到市民的生活品质和城市形象。近年来&#xff0c;智慧公厕系统的引入逐渐成为提升公共服务满意度的重要手段…...

幼儿和青少年编程学习路径

1. 引言 编程在现代教育中的重要性 随着信息时代的来临&#xff0c;编程不再是一个小众技能&#xff0c;而是成为未来社会各行业的重要基础能力。从计算机科学到人工智能&#xff0c;再到数据科学和软件工程&#xff0c;编程技能无疑是未来全球经济的核心驱动力之一。越来越多…...

leetcode48:旋转矩阵

题目&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5…...

安装CentOS 8镜像和创建CentOS 8虚拟机教程

一、安装虚拟机 网上查找教程&#xff0c;我用的是VMware 17 二、下载CentOS 8镜像 1.阿里云下载CentOS 8镜像 centos安装包下载_开源镜像站-阿里云 (aliyun.com) 选择需要下载的版本&#xff0c;(建议)下载dvd1版本的iso&#xff08;也有下载boot版本的iso&#xff0c;创…...

针对考研的C语言学习(二叉树专题)

二叉树层次建树 对于二叉树&#xff0c;建树过程中需要一个&#xff08;尾插法的&#xff09;链表&#xff08;或队列&#xff09;来辅助确认当前父亲节点 由于尾插法需要一个尾指针。因此可以理解为队列&#xff0c;只不过是不带头结点的链表版队列。 但其实就是一个辅助找…...

【ARM 嵌入式 编译系列 10.9 -- Clang 编译器】

> ARM GCC 编译精讲系列课程链接 < 文章目录 Clang 编译器详细介绍Clang 主要特点Clang 许可协议Clang 与 GCC 主要差异Clang 使用示例Summary Clang 编译器详细介绍 Clang 是一个由 LLVM 项目开发的编译器前端&#xff0c;支持 C、C、Objective-C 和 Objective-C 等编程…...

《深度学习》【项目】自然语言处理——情感分析 <上>

目录 一、项目介绍 1、项目任务 2、评论信息内容 3、待思考问题 1&#xff09;目标 2&#xff09;输入字词格式 3&#xff09;每一次传入的词/字的个数是否就是评论的长度 4&#xff09;一条评论如果超过32个词/字怎么处理&#xff1f; 5&#xff09;一条评论如果…...

RU19.25 Standalone (GI和DB分开打)

参考文档&#xff1a;Patch 36916690 - GI Release Update 19.25.0.0.241015 2.1.1.1 OPatch Utility Information 12.2.0.1.42 or later 2.1.1.2 Validation of Oracle Inventory 分别在GI和Oracle Home下执行 $ <ORACLE_HOME>/OPatch/opatch lsinventory -detail -o…...

探索 Jupyter 核心:nbformat 库的神秘力量

文章目录 探索 Jupyter 核心&#xff1a;nbformat 库的神秘力量1. 背景介绍&#xff1a;为何选择 nbformat&#xff1f;2. nbformat 是什么&#xff1f;3. 如何安装 nbformat&#xff1f;4. 简单的库函数使用方法4.1 读取 Notebook 文件4.2 修改 Notebook 中的单元格4.3 添加 M…...

python+大数据+基于spark的短视频推荐系统【内含源码+文档+部署教程】

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ &#x1f345;由于篇幅限制&#xff0c;想要获取完整文章或者源码&#xff0c;或者代做&am…...

构建个人数字图书馆:用fanqienovel-downloader实现小说永久保存与跨设备阅读

构建个人数字图书馆&#xff1a;用fanqienovel-downloader实现小说永久保存与跨设备阅读 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 在数字阅读日益普及的今天&#xff0c;如何突破网络…...

海康工业相机LabVIEW二次开发实战——参数配置优化与图像高效存储

1. 海康工业相机与LabVIEW开发环境搭建 第一次接触海康工业相机时&#xff0c;我也被它丰富的功能接口和复杂的参数体系搞得晕头转向。但实际用LabVIEW开发后发现&#xff0c;只要掌握几个关键点&#xff0c;就能快速上手。海康官方提供的MVS客户端是个好东西&#xff0c;安装后…...

IndexTTS-2-LLM免费体验:基于大语言模型的新一代TTS服务

IndexTTS-2-LLM免费体验&#xff1a;基于大语言模型的新一代TTS服务 1. 引言&#xff1a;语音合成技术的革新 语音合成技术正在经历一场由大语言模型驱动的革命。传统的文本转语音(TTS)系统虽然能够将文字转化为语音&#xff0c;但在自然度和情感表达上始终存在局限。IndexTT…...

Ubuntu服务器生产环境部署Pixel Script Temple全记录

Ubuntu服务器生产环境部署Pixel Script Temple全记录 1. 准备工作与环境检查 在开始部署之前&#xff0c;我们需要确保服务器环境满足基本要求。首先确认你的Ubuntu服务器版本为20.04 LTS或22.04 LTS&#xff0c;这两个版本都提供长期支持&#xff0c;适合生产环境使用。 运…...

告别枯燥单选按钮:用QCommandLinkButton打造Windows风格向导页(Qt5.15+)

告别枯燥单选按钮&#xff1a;用QCommandLinkButton打造Windows风格向导页&#xff08;Qt5.15&#xff09; 在传统的向导式界面设计中&#xff0c;单选按钮&#xff08;QRadioButton&#xff09;长期占据主导地位。但当我们追求更符合现代用户体验的设计时&#xff0c;这种上世…...

Synopsys综合指令进阶指南:为什么90%的工程师都用错了full_case?

Synopsys综合指令进阶指南&#xff1a;为什么90%的工程师都用错了full_case&#xff1f; 在数字电路设计领域&#xff0c;Synopsys工具链中的full_case指令就像一把双刃剑——用得好可以优化电路结构&#xff0c;用不好则可能导致仿真与综合结果不一致的灾难性后果。本文将带您…...

GPU算力优化实践:Pixel Epic智识终端显存配额与逻辑发散调参详解

GPU算力优化实践&#xff1a;Pixel Epic智识终端显存配额与逻辑发散调参详解 1. 引言&#xff1a;当像素冒险遇上AI研究 在科研领域&#xff0c;我们常常面临一个两难选择&#xff1a;要么追求严谨性而牺牲创造力&#xff0c;要么放飞思维却失去逻辑性。Pixel Epic智识终端通…...

Intv_AI_MK11自动化测试脚本生成:基于自然语言描述的测试用例实现

Intv_AI_MK11自动化测试脚本生成&#xff1a;基于自然语言描述的测试用例实现 1. 引言&#xff1a;当测试遇上自然语言处理 "测试工程师小王盯着屏幕上的登录页面&#xff0c;手指在键盘上敲击着&#xff1a;driver.find_element(By.ID, username).send_keys(testuser).…...

OpenClaw+千问3.5-9B社交媒体管理:定时发布与智能互动

OpenClaw千问3.5-9B社交媒体管理&#xff1a;定时发布与智能互动 1. 为什么选择OpenClaw管理社交媒体 去年我开始尝试运营技术类社交媒体账号时&#xff0c;每天要花2-3小时手动处理内容发布和粉丝互动。直到发现OpenClaw这个能直接操控我电脑的AI助手&#xff0c;配合千问3.…...

兄弟同心,其利断金:Tomcat、Nginx 与 Node.js 的“三重奏”

写在前面初学后端开发时&#xff0c;我一直困惑一个问题&#xff1a;Tomcat、Nginx、Node.js&#xff0c;它们之间到底是什么关系&#xff1f;刚开始用 Spring Boot&#xff0c;发现里面集成了 Tomcat&#xff0c;启动项目后访问 localhost:8080 就能调接口。那时我以为&#x…...