JAVA itextpdf 段落自动分页指定固定行距打印
JAVA itextpdf 段落自动分页指定固定行距打印
前言:公司有个需求,打印的合同模板左上角要加上logo的图标。但是itext pdf 自动分页会按照默认的顶部高分页打印内容的,导致从第二页开始logo图标就会把合同的内容给覆盖掉了。然后尝试了挺多方法,因为itext 版本问题,很多方法都没办法实现,最后通过多次尝试,最终艰难满足要求。PS:下面的实现方法目前仅在itext5.x版本可行,其他版本没进行实验过,所以不知道是否同样可行,仅供参考。
1. 自定义类实现IEventHandler接口
实现的核心的思想,就是要IEventHandler接口重写handleEvent,
自定义CustomPageStartHandler,该类主要实现从第二页,设置从距离页面顶部处开始
代码如下:
public class CustomPageStartHandler implements IEventHandler {private final Document document;private static final float TOP_MARGIN = 40f;public CustomPageStartHandler(Document document) {this.document = document;}@Overridepublic void handleEvent(Event event) {PdfDocumentEvent docEvent = (PdfDocumentEvent) event;PdfDocument pdfDoc = docEvent.getDocument();PdfPage page = docEvent.getPage();int pageNumber = pdfDoc.getPageNumber(page);// 控制从第二页开始的内容起始位置if (pageNumber > 1) {// 在第二页及之后的页面设置从距离页面顶部处开始document.setMargins(TOP_MARGIN, document.getRightMargin(),document.getBottomMargin(),document.getLeftMargin());}}
}
2. 添加自定义事件处理器
pdf.addEventHandler(PdfDocumentEvent.START_PAGE, new CustomPageStartHandler(document));
3. 在每页左上角添加logo图标
for (int j = 1; j <= pageCount; j++) {// 试剂logoRectangle pageSize = pdf.getPage(j).getPageSize();String logoImagePath = WebUtils.getClasspath()+ File.separator+ "static" + File.separator + "image" + File.separator+"logo.jpg";ImageData logoImageData = ImageDataFactory.create(logoImagePath);logoImageData.setDpi(300, 300);Image logoImage = new Image(logoImageData);logoImage.scaleAbsolute(88f, 22f);document.add(logoImage.setFixedPosition(j, 27f, pageSize.getTop()- 38));
}
4.最终实现的效果如下

相关文章:
JAVA itextpdf 段落自动分页指定固定行距打印
JAVA itextpdf 段落自动分页指定固定行距打印 前言:公司有个需求,打印的合同模板左上角要加上logo的图标。但是itext pdf 自动分页会按照默认的顶部高分页打印内容的,导致从第二页开始logo图标就会把合同的内容给覆盖掉了。然后尝试了挺多方法…...
基于SpringBoot+Vue的周边游平台个人管理模块的设计与实现
TOC springboot220基于SpringBootVue的周边游平台个人管理模块的设计与实现 第一章 绪论 1.1 选题背景 目前整个社会发展的速度,严重依赖于互联网,如果没有了互联网的存在,市场可能会一蹶不振,严重影响经济的发展水平…...
开源数据库同步工具monstache
Monstache是一个用Go语言编写的同步工具,主要用于将MongoDB中的数据同步到Elasticsearch中。它支持全量同步和增量同步,并提供了丰富的配置参数以及使用Go、JavaScript编写插件来自定义处理数据的逻辑的能力。Monstache 工作流程如下图: 以下…...
Ubuntu连接GitHub
报错:Please make sure you have the correct access rights and the repository exists.原因:本地没有SSH Key存在解决: 首先为系统设置github的用户名和自己的邮箱 git config --global user.name "****" git config --global us…...
微信支付流程
1. 创建订单 请求创建订单的 API 接口:把 订单金额、收货地址、订单中包含的商品信息 发送到服务器服务器响应的结果:订单编号 2.订单预支付 请求订单预支付的 API 接口:把步骤1得到的 订单编号 发送到服务器服务器响应的结果:…...
LVS理论知识
目录 1.描述以及工作原理 1.什么是LVS 2.LVS调度算法 1.静态调度算法 1.轮询RR 2.加权轮询WRR 3.目标地址hash---DH 4.源地址hash---SH 2.动态调度算法 1.LC最少连接 2.wlc加权最少连接 3.sed最少期望延迟 4.nq不排队调度算法 5.lblc基于本地最少连接 6.lnlcr带…...
uniapp接口请求this.$request
代码示例: createPhoto(url) {this.$request({url: /emp/gallery-photo/create,//后端接口method: post,//请求方法header: {//请求头tenant-id: 1,},data: {//请求参数galleryId: this.albumId,empUserId: this.empUserId,"url": url,}}).then((res) &…...
vulnhub靶机 W34KN3SS(渗透测试详解)
一、靶机信息收集 1、靶机下载地址 https://download.vulnhub.com/w34kn3ss/W34KN3SS.ova 2、扫描靶机IP 3、探测靶机端口、主机、服务版本信息 nmap -sS -sV -A -p- 192.168.31.160 4、进行目录扫描 二、web渗透测试 1、访问靶机IP 没什么发现 2、进行目录拼接访问 拼接…...
2024年8月16日嵌入式学习
今日复习信号量的知识点和学习了进程间通信和管道 总结信息量: 共享进程资源 方便 线程 抢占公共资源 带来的问题 1. 互斥访问 需要互斥锁 来保障 原子性操作 使 操作过程 完整 互斥锁: a.初始化 锁 b.加锁 //使用资源之前 …...
vue+ckEditor5 复制粘贴wold文字+图片并保存格式
第一步在vue2项目下安装 npm install --save ckeditor/ckeditor5-build-decoupled-document 第二 项目下新建一个plugins的文件夹将这个包ckeditor5-build-classic放入 (包在页面最上方 有个下载按钮 可以下载) 刚开始时 ckeditor5-build-classic文件…...
redis列表若干记录
2、列表 ziplist ziplist参数 entry结构 entry-data:节点存储的元素prelen:记录前驱节点长度encoding:当前节点编码格式encoding encoding属性 使用多个子节点存储节点元素长度,这种多字节数据存储在计算机内存中或者进行网络传输的时的字节…...
固态硬盘用mbr还是GPT?固态硬盘分区类型用mbr还是GPT分析
固态硬盘用mbr还是GPT?答:固态硬盘分区类型用mbr还是gpt其实取决于你对分区要求及引导模式。我们知道现在的引导模式有uefi和legacy两种引导模式,如果采用的是uefi引导模式,分区类型对应的就是gpt分区(guid),如果引导模…...
http/sse/websocket 三大协议演化历史以及 sse协议下 node.js express 服务实现打字机案例 负载均衡下的广播实现机制
背景 自从2022年底chatgpt上线后,sse就进入了大众的视野,之前是谁知道这玩意是什么?但是打字机的效果看起来是真的很不错,一度吸引了很多人的趋之若鹜,当然了这个东西的确挺好用,而且实现很简单࿰…...
智能时代新宠:2024年录音转文字软件
无论是学生群体记录课堂笔记,职场人士整理会议纪要,还是自媒体创作者捕捉灵感火花,录音转文字软件都以其独特的便利性和高效性赢得了广泛的好评。今天,就让我们一起探索那些深受大家喜爱的录音转文字工具吧。 1.365在线转文字 链…...
【Python机器学习】树回归——使用Python的tkinter库创建GUI
机器学习给我们提供了一些强大的工具,能从未知数据中抽取出有用的信息。因此,能否这些信息以易于人们理解的方式呈现十分重要。如果人们可以直接与算法和数据交互,将可以比较轻松的进行解释。其中一个能够同时支持数据呈现和用户交互的方式就…...
谷歌浏览器网页底图设置为全黑
输入网址:chrome://flags/ 搜索dark,选择Enabled,重启浏览器即可...
Unity | AmplifyShaderEditor插件基础(第二集:模版说明)
目录 一、前言 二、核心模版和URP模版 1.区别介绍 2.自己的模版 三、输出节点 1.界面 2.打开OutPut 3.ShderType 4.ShaderName 5.Shader大块内容 6.修改内容 四、预告 一、前言 内容全部基于以下链接基础以上讲的。 Unity | Shader基础知识(什么是shader…...
【Linux入门】Linux常见指令
目录 前言 一、Linux基本指令 1.ls指令 2.pwd命令 3.cd 指令 4.touch指令 5.mkdir指令 6.rmdir指令 && rm 指令 7.man指令 8.cp指令 9.mv指令 10.cat 11.date 12.top 13.shutdown-关机 14.重要的几个热键 二、Linux扩展指令 总结 前言 Linux指令是在…...
startData
某音startData 记得加入学习群: python爬虫&js逆向3 714283180...
CV每日论文--2024.7.24
1 、AutoAD-Zero: A Training-Free Framework for Zero-Shot Audio Description 中文标题:T2V-CompBench:组合文本到视频生成的综合基准AutoAD-Zero:零样本音频描述的免训练框架 简介:我们的目标是以无需训练的方式为电影和电视剧…...
Rufus技术解析:Windows环境下创建ext2/ext3/ext4文件系统的最佳实践
Rufus技术解析:Windows环境下创建ext2/ext3/ext4文件系统的最佳实践 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus Rufus作为可靠的USB格式化工具,在Windows平台上为Linu…...
PFC-FLAC3D耦合学习案例解析
pfc-flac3D耦合学习案例 !岩土工程师的桌面摆满了数值模拟手册 在边坡监测现场见到裂缝的那一刻,我突然意识到离散元与连续介质耦合不再是教科书里的概念——PFC的颗粒崩落和FLAC的应力云图必须握手言和。今天咱们用Python当翻译官,看看这对冤家怎么在滑…...
手把手教你用Python写一个高效图片爬虫(附代码+反爬策略)
大家好!今天分享一个我近期开发的Python图片爬虫程序,适合新手入门和进阶学习。项目包含多线程下载、反反爬机制、数据存储等核心功能,代码已开源并附详细注释。 一、项目背景 在数据采集场景中,图片下载是常见需求。但目标网站…...
道德迷宫工程:让伦理审查永远卡关
当伦理成为迷宫在数字化转型的浪潮中,软件系统深度渗透医疗、金融、公共治理等核心领域。伦理审查本应是技术创新的安全阀,却被一种名为道德迷宫工程(Ethical Maze Engineering) 的策略系统性破坏——通过精心设计的流程复杂性、模…...
Vue 3项目性能优化:给你的Live2D看板娘‘瘦身’并加速加载的3个实用技巧
Vue 3项目性能优化:Live2D看板娘轻量化与加速加载实战指南 当你的博客或展示型网站成功集成了Live2D看板娘后,是否遇到过页面加载变慢、资源过大或移动端体验不佳的问题?作为一位长期在Vue项目中优化动态元素性能的开发者,我深知在…...
如何高效解决Cursor试用限制?完整实用的解决方案指南
如何高效解决Cursor试用限制?完整实用的解决方案指南 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro. We h…...
OpenClaw内容创作:nanobot镜像辅助生成技术文章大纲与初稿
OpenClaw内容创作:nanobot镜像辅助生成技术文章大纲与初稿 1. 为什么需要自动化内容创作工具 作为一名技术博主,我经常面临这样的困境:明明积累了大量实践经验,却总是卡在"如何把零散知识点组织成结构化的文章"这个环…...
Wan2.2-I2V-A14B镜像部署教程:无需conda/pip,纯脚本一键启动
Wan2.2-I2V-A14B镜像部署教程:无需conda/pip,纯脚本一键启动 1. 镜像概述与核心优势 Wan2.2-I2V-A14B是一款专为文生视频任务优化的私有部署镜像,特别针对RTX 4090D 24GB显存显卡进行了深度优化。这个镜像的最大特点是开箱即用,…...
UniRig:革新3D模型自动化绑定的智能骨骼生成技术
UniRig:革新3D模型自动化绑定的智能骨骼生成技术 【免费下载链接】UniRig One Model to Rig Them All: Diverse Skeleton Rigging with UniRig 项目地址: https://gitcode.com/gh_mirrors/un/UniRig 在3D内容创作领域,骨骼绑定一直是制约效率的关…...
告别npm install electron的漫长等待:深入解读ELECTRON_MIRROR环境变量与国内镜像源配置全攻略
深度优化Electron安装体验:环境变量与镜像源配置实战指南 每次执行npm install electron时,你是否盯着缓慢移动的进度条感到焦虑?作为跨平台桌面应用开发的核心框架,Electron的安装体验直接影响开发效率。本文将带你深入理解Elec…...
