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

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.最终实现的效果如下
在这里插入图片描述

http://www.lryc.cn/news/425449.html

相关文章:

  • 基于SpringBoot+Vue的周边游平台个人管理模块的设计与实现
  • 开源数据库同步工具monstache
  • Ubuntu连接GitHub
  • 微信支付流程
  • LVS理论知识
  • uniapp接口请求this.$request
  • vulnhub靶机 W34KN3SS(渗透测试详解)
  • 2024年8月16日嵌入式学习
  • vue+ckEditor5 复制粘贴wold文字+图片并保存格式
  • redis列表若干记录
  • 固态硬盘用mbr还是GPT?固态硬盘分区类型用mbr还是GPT分析
  • http/sse/websocket 三大协议演化历史以及 sse协议下 node.js express 服务实现打字机案例 负载均衡下的广播实现机制
  • 智能时代新宠:2024年录音转文字软件
  • 【Python机器学习】树回归——使用Python的tkinter库创建GUI
  • 谷歌浏览器网页底图设置为全黑
  • Unity | AmplifyShaderEditor插件基础(第二集:模版说明)
  • 【Linux入门】Linux常见指令
  • startData
  • CV每日论文--2024.7.24
  • 大语言模型的简易可扩展增量预训练策略
  • python学习之异常
  • 多张图像实现全景无痕拼接操作
  • 在阿里云ecs上构建一个WordPress博客网站
  • 安卓应用开发学习:查看手机传感器信息
  • C语言字符串缺陷
  • 分布式场景中的常见的技术问题及解决,如分布式锁、分布式事务、分布式 session、分布式任务调度
  • Android笔试面试题AI答之Kotlin(9)
  • C# 不一样的洗牌算法---Simd指令
  • LVGL系列3--纯物理(外部)按键,数字键盘控制控件
  • FPGA开发——UART回环实现之接收模块的设计