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都输出来了。

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

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

相关文章

期货考核系统部署/配资net源码

关于期货考核系统部署与配资NET源码的问题&#xff0c;以下是一些相关的信息和建议&#xff1a; 一、期货考核系统部署 期货考核系统的部署是一个复杂的过程&#xff0c;涉及需求分析、系统设计、开发、测试、部署等多个环节。以下是一些关键步骤&#xff1a; 需求分析&…

机器学习——主要分类

前言&#xff1a; 机器学习是人工智能的重要分支之一&#xff0c;它通过分析数据来构建模型&#xff0c;并通过这些模型进行预测、分类或决策。随着数据量的迅速增长&#xff0c;机器学习在多个领域展现出巨大的应用潜力&#xff0c;推动了科技的进步。根据学习方式和数据的使用…

Shell实现查看用户密码有效期

基于 Shell 脚本&#xff0c;实现显示 Linux 用户的密码修改时间、到期时间、到期天数和密码有效期等信息。 Shell 脚本&#xff1a; #!/bin/bash# 获取用户名 read -p "请输入要查询的用户名: " username# 检查用户是否存在 if id "$username" &>…

马化腾:“腾讯只剩半条命,另外半条交给合作伙伴”;服务号消息折叠折腾死生态伙伴另外半条命

马化腾曾坦言&#xff1a;“腾讯只剩半条命&#xff0c;另外半条交给合作伙伴。”这句话道出了腾讯赖以为生的生态布局&#xff0c;腾讯的成功不仅依靠自身强大的平台&#xff0c;还依赖着生态系统中的合作伙伴。而今&#xff0c;微信服务号“消息折叠”的推出&#xff0c;正是…

如何替换OCP节点(二):使用 antman脚本 | OceanBase应用实践

前言&#xff1a; OceanBase Cloud Platform&#xff08;简称OCP&#xff09;&#xff0c;是 OceanBase数据库的专属企业级数据库管理平台。 在实际生产环境中&#xff0c;OCP的安装通常是第一步&#xff0c;先搭建OCP平台&#xff0c;进而依赖OCP来创建、管理和监控我们的生…

前端_003_js扫盲

文章目录 var,let,const严格模式数据类型运算符事件常用对象函数绑定call() ,apply(),bind() 闭包浏览器中事件循环回调和异步Promiseasync和await DOMBOMAjax var,let,const let是var的升级版本&#xff0c;对于块作用域&#xff0c;var无法进行限制&#xff0c;let不会存在该…

营销邮件软件:提升邮件营销效率必备工具!

营销邮件软件选择技巧&#xff1f;免费高效的邮件营销软件推荐&#xff1f; 如何高效地管理和优化邮件营销活动成为了企业面临的一大挑战。营销邮件软件成为提升邮件营销效率的必备工具。MailBing将深入探讨营销邮件软件的功能、优势以及如何选择合适的工具。 营销邮件软件&a…

【深度学习】transformer为什么使用多头注意力极致?为什么不使用一个头

在现代深度学习中,Transformer 模型的多头注意力机制已被广泛应用,特别是在自然语言处理领域。最近我读到一篇有趣的博客文章,详细介绍了为什么 Transformer 采用多头注意力,而不是简单的单头注意力。文章从理论推导到代码实现,对多头注意力机制进行了深入分析。下面我为大…

前端新手教程:HTML、CSS 和 JavaScript 全面详解及实用案例

一、引言 在当今数字化的时代&#xff0c;前端开发扮演着至关重要的角色&#xff0c;它决定了用户与网页和应用程序交互的体验。HTML、CSS 和 JavaScript 作为前端开发的核心技术&#xff0c;分别负责网页的结构、样式和交互。本教程将为前端新手全面深入地介绍 HTML、CSS 和 …

element checkbox选框和文字分开点击---更改一列checkbox的顺序(进阶版)

选框和文字分开点击&#xff0c;找了很多&#xff0c;没有我想要的效果&#xff0c;但也借鉴了一下&#xff0c;实现了&#xff0c;记录一下 样式看起来倒是没多大区别&#xff0c;需求&#xff1a; 勾选了选框才可以点击文字 &#xff0c;一次只能点击一条数据&#xff0c;点…

【分布式微服务云原生】《微服务架构大揭秘:关键组件全览与实战指南》

标题&#xff1a;《微服务架构大揭秘&#xff1a;关键组件全览与实战指南》 摘要&#xff1a;本文深入详解微服务架构及其关键组件&#xff0c;包括服务网关、配置中心、熔断器、负载均衡、限流降级和服务注册与发现的核心功能特点、技术选型以及注意事项。读者将全面了解微服…

中阳金融市场中的风险管理与投资优化策略

在全球经济波动性不断加剧的背景下&#xff0c;金融市场的复杂性与不确定性显著增加。作为国际金融市场中的重要组成部分&#xff0c;中阳金融市场吸引了大量投资者的关注。面对风险与机遇并存的市场环境&#xff0c;如何合理制定风险管理与投资优化策略&#xff0c;成为投资者…

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey阅读笔记

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey 综述阅读笔记 仅记录个人比较感兴趣的部分 基本知识 PEFT的三种分类&#xff1a;additive, selective, reparameterized, and hybrid fine-tuning selective fine-tuning 不需要任何额外的参数&am…

Axure横向菜单高级交互

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;横向菜单高级交互 主要内容&#xff1a;横向菜单左右拖动、选中效果 应用场景&#xff1a;app横向菜单、pc后台动态区域 案例展示&#xff1a; 演…

SpringBoot技术的车辆管理流程自动化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

uniapp-实现天地图以及行政区划图层覆盖

前言&#xff1a; 在uniapp中&#xff0c;难免会遇到使用地图展示的功能&#xff0c;但是百度谷歌这些收费的显然对于大部分开源节流的开发者是不愿意接受的&#xff0c;所以天地图则是最佳选择。 此篇文章&#xff0c;详细的实现地图展示功能&#xff0c;并且可以自定义容器宽…

儿童服装CPC认证的测试项目有哪些

儿童服装CPC认证的测试项目主要包括以下几个方面&#xff1a; 一、物理性能测试 小零件测试&#xff1a;检查产品是否含有小零件&#xff0c;避免对3岁及以下儿童造成窒息风险。这包括检查服装上的纽扣、拉链、装饰物等小部件是否牢固&#xff0c;以及是否容易脱落。锐点&…

探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱

文章目录 探索 Jupyter 笔记本转换的无限可能&#xff1a;nbconvert 库的神秘面纱背景&#xff1a;为何选择 nbconvert&#xff1f;库简介&#xff1a;nbconvert 是什么&#xff1f;安装指南&#xff1a;如何安装 nbconvert&#xff1f;函数用法&#xff1a;简单函数示例应用场…

安装vue发生异常:npm ERR! the command again as root/Administrator.

一、异常 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If you believe this might b…

安卓开发中轮播图和其指示器的设置

在安卓开发中&#xff0c;轮播图&#xff08;Carousel&#xff09;是一种常见的UI组件&#xff0c;用于展示一系列图片或内容&#xff0c;用户可以左右滑动来切换不同的视图。轮播图通常用于展示广告、新闻、产品图片等。 轮播图的指示器&#xff08;Indicator&#xff09;则是…