itext生成重复水印(watermark)

itext Pdf页眉/页脚/水印 阅读详情
    在这里只讲在生成pdf的文件过程中添加水印,至于向已存在的pdf文件中添加水印,那并不是本文所探讨的内容。
    在网上搜了很多文字都不知道该怎么做。因为网上大部分都是讲的向已经存在的pdf文件中添加水印,而不是在写文件的过程中直接添加水印。
    不过还是有找到下面的文章, itext in action学习笔记,使我很快找到了办法。那就是通过添加pageEvent事件解决。
    代码如下:

writer.setPageEvent(new Watermark("HELLO WORLD"));//水印内容

//在继承自PdfPageEventHelper类中的OnEndPage方法中添加水印
public void OnEndPage(PdfWriter writer, Document document) {
	ColumnText.ShowTextAligned(writer.DirectContent,
	                           Element.ALIGN_RIGHT,
	                           header[0],
	                           100.0f,
	                           200.0f,
	                           0);
}


    不过水印只是出来了一条,并没有我想想的多条。
    后来只有硬着头皮看itext5的文档《itext in action》 second Edition英文版,结果还是没正明白。
    于是还是只有在网上搜,结果收到下面的 一个问答,里面的提问及回答给了我很大的启示

That method is obsolete. 
Use page events to add watermarks (as many as you want). 
br, 
Bruno 

    看来还是得在pageEvent中做文章。有过了许久,突然灵光一线。出现一条就用一次,出现多条,用个循环打印不就是了吗?于是赶紧先看看ColumnText的ShowTextAligned()方法的api文档。

showTextAligned
public static void showTextAligned(PdfContentByte canvas,
                                   int alignment,
                                   Phrase phrase,
                                   float x,
                                   float y,
                                   float rotation)Shows a line of text. Only the first line is written. 

Parameters:
canvas - where the text is to be written to
alignment - the alignment
phrase - the Phrase with the text
x - the x reference position
y - the y reference position
rotation - the rotation to be applied in degrees counterclockwise

    果然发现有横纵坐标的参数。于是乎将自定义的Watermark类改为如下:

public class Watermark extends PdfPageEventHelper {
	Font FONT = new Font(FontFamily.HELVETICA, 30, Font.BOLD, new GrayColor(0.95f));
	private String waterCont;//水印内容
	public Watermark() {

	}
	public Watermark(String waterCont) {
		this.waterCont = waterCont;
	}

	@Override
	public void onEndPage(PdfWriter writer, Document document) {
		for(int i=0 ; i<5; i++) {
			for(int j=0; j<5; j++) {
				ColumnText.showTextAligned(writer.getDirectContentUnder(),
				                           Element.ALIGN_CENTER,
				                           new Phrase(this.waterCont == null ? "HELLO WORLD" : this.waterCont, FONT),
				                           (50.5f+i*350),
				                           (40.0f+j*150),
				                           writer.getPageNumber() % 2 == 1 ? 45 : -45);
			}
		}
	}
}
 
    问题自然就解决了。
Java实现Word转PDF:Aspose.Words实战与生产环境部署指南 文档格式转换是数据处理中的常见需求,其核心在于实现不同格式间的精确映射与渲染。在Java生态中,Apache POI等开源库虽能处理基础文档操作,但在处理复杂格式转换时,常面临格式还原度低、开发成本高等挑战。专业文档处理库通过内置完整的文档对象模型(DOM)和独立布局引擎,提供了高保真的转换能力,显著提升了开发效率和输出质量。这类技术在企业级应用如电子合同生成、报告归档和文档处理服务中具有重要价值。本文聚焦于使用Aspose.Words for Java实现稳定可靠的Word转PDF功能,深入探讨其架构原理 阅读详情

相关推荐

Java实现Excel转PDF高保真转换:Aspose.Cells实战指南

在Java开发中,文档格式转换是常见的业务需求,尤其是将Excel报表转换为PDF以便于分发和打印。其核心挑战在于实现高保真度转换,即确保PDF在布局、样式、分页等方面与原始Excel文件完全一致。这涉及到对文档渲染引擎、字体嵌入和页面模型匹配等底层原理的深入理解。传统方案如Apache POI结合iText虽灵活,但在处理复杂合并单元格、条件格式和精确分页时往往力不从心,难以满足企业级应用对格式准确性的严苛要求。因此,选择专业的文档处理库成为关键。本文聚焦于利用Aspose.Cells for Java这

weixin_30561177的博客 444

绘制pdf表格 (二) 通过itext实现在pdf中绘制excel表格样式设置中文字体、水印、logo、页眉、页码

1、 绘制pdf表格 (二) 通过itext实现在pdf中绘制excel表格样式设置中文字体、水印、logo、页眉、页码

一恍过去 2万+

PDF文档处理技巧:拆分合并、编辑与安全保护实战指南

PDF作为跨平台文档标准,其核心原理基于PostScript页面描述语言,通过封装文本、图像和格式信息实现设备无关的显示效果。在数字化办公场景中,PDF处理技术能够显著提升文档流转效率,降低格式兼容性问题。特别是在文档整合与安全管控方面,掌握PDF拆分合并、内容编辑和加密保护等基础操作,能够有效应对合同报告处理、敏感信息管理等实际工作需求。本文聚焦PDF页面精准操作、OCR文字识别和权限设置等实用技能,结合Adobe Acrobat和Python自动化工具,为职场新人提供从基础操作到批量处理的全流程解决方案

weixin_30540691的博客 374

itext生成预览的pdf添加水印

最近要求添加水印,我们所做的都是先生成预览pdf,然后用户自行下载,所以本代码展示的是预览pdf添加水印。 文字水印: /** * 添加文字水印 */ public class Watermark extends PdfPageEventHelper { /* 该方案只能添加字母,汉字添加不上 protected Phrase watermark = n...

xue2xue的博客 4129

模板驱动的文档自动化:让内容5分钟变专业PDF

文档自动化是一种将结构化内容按预设规则批量生成标准化交付物的技术范式,其核心在于模板驱动——即把排版逻辑、样式规范与交互行为编码为可复用、可继承的视觉协议。相比传统手动排版或通用编辑器,它通过确定性规则引擎实现‘内容确定→格式自洽→输出稳定’的闭环,显著提升白皮书、用户手册、课程资料等高频文档的生产效率与跨平台一致性。尤其适合市场、教育、SaaS等需快速迭代专业PDF交付物的场景,真正实现从‘写完即交付’到‘粘贴即出版’的跃迁。

weixin_33694172的博客 433

Java技术变现新路径:基于JVM生态的工程化赚钱模型

Java作为一门成熟语言,其核心价值已从语法特性升维为JVM生态所承载的稳定性、向后兼容性与企业级信任背书。在等保合规、遗留系统现代化和垂直领域工具链等刚性需求驱动下,Java凭借字节码增强、Java Agent、ClassLoader热加载等原生能力,成为构建合规即服务(Compliance-as-a-Service)、遗留系统缝合层及微型SaaS的关键技术底座。它不追求性能极限,而以‘可审计、可验证、零改造集成’满足法务签字、运维背书与终端用户习惯三重决策节点。本文聚焦Java在2025年中小企业技术变

weixin_30378623的博客 407

阿里云OSS上传PDF文件同时加上图片水印

根据IO流的处理,简单思想是在上传主机建立一个临时文件 存放加水印之后的新PDF文件,上传服务器完成之后 删除临时文件 具体代码如下: 1、针对普通的文件上传 如果知道本地路径可以通过简单方法加水印 public static void main(String[] args) throws DocumentException, IOException { // // ...

Yuli_li的专栏 2928

WaterMarkUtil.java

通过java程序给PDF添加水印,可以添加文字和图片两种水印方式。通过坐标调整水印在文件中的位置。根据自己需求添加需要的水印类型

Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j

背景:做默默学代理需要去给每日日日练打上水印,对于重复性操作pdf编辑统一通过程序来批量处理。 目标:实现一个自定义的pdf水印工具。 第一部分:word转pdf 第二部分:pdf编辑 实现思路如下: 1、给定一个目录,检索该目录下所有文件,筛选出所有的docx以及PDF文件。 2、将目录下docx文件转为pdf文件,并将docx文件统一剪切到tmp目录。 3、对所有的pdf文件来进行最定义【水印+广告】处理,将所有水印处理过的pdf文件统一输出到pdf目录。

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 2204

Wireshark实战解析IEC 61850 GOOSE报文:智能变电站通信调试指南

网络协议分析是理解现代工业通信系统的基础,其核心原理在于对数据包的捕获、解码与解析。在电力自动化领域,IEC 61850标准定义了智能变电站内设备间高效、可靠的通信框架,其中GOOSE(通用面向对象变电站事件)协议因其基于以太网多播和快速重传机制,成为保护跳闸、联锁等关键信号传输的基石,其技术价值在于实现了微秒级延迟的高可靠性通信。掌握GOOSE报文的分析能力,对于现场调试、故障定位及系统验证至关重要。本文聚焦于使用Wireshark这一网络分析工具,深入解析GOOSE报文结构,涵盖从以太网帧头、协议标识到

weixin_34401479的博客 376

利用OTSU阈值算法在ZYNQ上实现浒苔识别

利用OTSU阈值算法进行图像二值化,结果用HDMI显示

qq_38075564的博客 1275

java 给pdf添加水印

【代码】java 给pdf添加水印。

qq_41292133的博客 780

13 万字 C 语言从入门到精通保姆级教程2021 年版

13 万字C语言保姆级教程,从入门到精通。

李南江 61万+

Python构建PDF处理工具集:从编辑压缩到加密转换的完整实践

PDF作为一种跨平台、固定格式的文档标准,其核心在于将文本、图像、矢量图形等元素封装为自包含的独立文件。其技术原理基于PostScript语言和结构化文档模型,通过交叉引用表和对象流实现高效渲染与存储。在工程实践中,PDF处理的价值在于实现文档的自动化操作、格式统一与安全管控,广泛应用于电子合同、报告生成、档案数字化等场景。针对编辑、压缩、转换、加密等高频需求,开发者常需整合多个底层库来构建一站式解决方案。本文以Python生态为例,详细解析如何利用PyPDF2、pikepdf、pdfplumber等热⻔库

weixin_30252709的博客 379

Unity集成阿里Qwen2.5-Omni全模态大模型实战:语音交互与多模态AI开发指南

本文详细介绍了在Unity中集成阿里Qwen2.5-Omni全模态大模型的实战指南。通过C#脚本开发,实现语音交互、图像分析等多模态AI功能,涵盖API调用、音频处理、流式响应解析等核心步骤,为游戏、虚拟人等Unity应用提供沉浸式智能交互解决方案。

weixin_29005499的博客 316

绕开华为通道,获取解锁码解锁BootLoader

刷机有风险,操作需谨慎,如果因为各种因素导致手机变砖无法开机,本教程概不负责,望悉知 前言 这篇文章的大多内容是根据我自己找的一篇文章《绕开华为通道,获取解锁码解锁BootLoader》来编写的,里面的大部分内容是文章的原内容。下面的都是我参考文章中做了一些小部分的修改,增加了我华为P8手机的一些操作,下面开始讲述我的解锁过程。 因为华为官方在2018年的七八月份吧,关闭了解锁码的申请通道,这...

Martin.Mu `s Special Column 5万+

零成本PDF处理全攻略:开源工具与Python实战代码

PDF作为一种跨平台、格式稳定的文档格式,在办公自动化和数据交换中扮演着核心角色。其技术原理基于PostScript页面描述语言,通过结构化的对象模型封装文本、图像和矢量图形。在工程实践中,对PDF进行编辑、转换、合并、压缩等操作是常见需求,这直接关系到文档处理效率和自动化流程的构建。借助强大的开源工具和编程库,开发者可以构建灵活、免费且安全的本地化处理方案,有效替代商业软件。例如,使用PyPDF2库可以轻松实现PDF的合并与拆分,而Ghostscript命令行工具则为高质量的PDF压缩和格式转换提供了底层

weixin_33834137的博客 338

星网锐捷语音网关密码重置恢复出厂设置

星网锐捷语音网关---密码重置 第一种星网锐捷SVX网关恢复出厂设置的方法 eth1口 任意口插网线,连接电脑并设置电脑固定ip为: 一, 二 网页输入: 192.168.88.86 admin 默认密码 admin 登陆。 忘记密码 可通过以下方法重置: 三: 通过crt或者 shell工具 ,连接 root@192.168.88.86 连续输入两次 passwd a12345678 reboot重启后。通过账号 密码 a12345678 即可登陆系...

cibazhanji2176的博客 1万+
上一篇: outlook与时间管理
下一篇: outlook与时间管理
Ctrain
博客等级 码龄19年 22粉丝 271原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值