用Python在PDF文档中插入单图像水印和平铺图像水印

news2025/1/16 16:19:49

PDF文档因其跨平台兼容性和内容保真度成为信息交换的标准载体,为应对版权侵犯、内容篡改以及未经授权的传播等风险,向PDF中插入图片水印成为一种强化文档安全性、彰显所有权及实施访问控制的有效手段。图片水印不仅能以直观的方式标示文档来源、强化版权意识,还能通过独特设计防范非法复制与扩散。利用Python,我们可以批量在PDF文档中插入图片水印。本篇将详解如何运用Python实现PDF文档中图片水印的添加,助力用户提升PDF文档保护与智能化水平。

  • 用Python在PDF文档中插入单式图片水印
  • 用Python在PDF文档中插入重复图片水印

本文所使用的方法需要Spire.PDF for Python,PyPI: pip install Spire.PDF

用Python在PDF文档中插入单式图片水印

单图像水印是 PDF 页面中心的透明图像。我们可以使用库中的 API 在任意 PDF 页面上绘制指定图像作为水印。具体步骤如下:

  1. 导入所需模块。
  2. 创建一个 PdfDocument 类对象。
  3. 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文档。
  4. 使用 PdfImage.FromFile() 方法加载水印图像。
  5. 循环浏览文档中的页面以添加水印。
    • 使用 PdfDocument.Pages.get_Item() 方法获取页面。
    • 使用 PdfPageBase.Canvas.SetTransparency() 方法设置水印的透明度。
    • 使用 PdfPageBase.Canvas.DrawImage() 方法在页面中央绘制水印图像。
  6. 使用 PdfDocument.SaveToFile() 方法保存文档。
  7. 释放资源。

代码示例:

from spire.pdf import *
from spire.pdf.common import *

# 创建 PdfDocument 类对象
pdf = PdfDocument()

# 加载 PDF 文档
pdf.LoadFromFile("示例.pdf")

# 加载水印图像
image = PdfImage.FromFile("Marker.png")

# 获取图像的宽度和高度
imageWidth = float(image.Width)
imageHeight = float(image.Height)

# 遍历文档中的每一页
for i in range(pdf.Pages.Count):
    # 获取一页
    page = pdf.Pages.get_Item(i)
    # 设置水印的透明度
    page.Canvas.SetTransparency(0.3)
    # 获取页面的宽度和高度
    pageWidth = page.ActualSize.Width
    pageHeight = page.ActualSize.Height
    # 在页面上绘制水印图像
    page.Canvas.DrawImage(image, pageWidth/2 - imageWidth/2, pageHeight/2 - imageHeight/2, imageWidth, imageHeight)

# 保存文档
pdf.SaveToFile("output/PDF单张图像水印.pdf")
pdf.Close()

结果文档:
Python插入单图像水印到PDF

用Python在PDF文档中插入重复图片水印

重复图像水印是在 PDF 页面上定期重复的图像。在 PDF 页面上绘制重复图像水印需要使用库中的 PdfTillingBrush 类。以下是详细步骤:

  1. 导入所需模块。
  2. 创建一个 PdfDocument 类对象。
  3. 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文档。
  4. 使用 PdfImage.FromFile() 方法加载水印图像。
  5. 循环浏览文档中的页面以添加水印。
    • 使用 PdfDocument.Pages.get_Item() 方法获取页面。
    • 创建一个 PdfTilingBrush 类对象,并设置其大小以确定水印的重复次数。
    • 使用 PdfTillingBrush.Graphics.SetTransparency() 方法设置水印的透明度。
    • 使用 PdfTillingBrush.Graphics.TranslateTransform() 方法将坐标系平移到指定位置,使水印显示在每次重复的中心。
    • 使用 PdfTillingBrush.Graphics.DrawImage() 方法在耕作刷上绘制水印图像。
    • 使用 PdfPageBase.Canvas.DrawRectangle() 方法在页面上绘制水印。
  6. 使用 PdfDocument.SaveToFile() 方法保存文档。
  7. 释放资源。

代码示例:

from spire.pdf.common import *
from spire.pdf import *

# 创建 PdfDocument 类对象
pdf = PdfDocument()

# 加载 PDF 文档
pdf.LoadFromFile("示例.pdf")

# 加载水印图像
image = PdfImage.FromFile("Marker.png")

# 遍历文档中的每一页
for i in range(pdf.Pages.Count):
    # 获取一页
    page = pdf.Pages.get_Item(i)
    # 创建 PdfTilingBrush 类对象并设置其大小
    brush = PdfTilingBrush(SizeF(page.Canvas.Size.Width / float(3), page.Canvas.Size.Height / float(3)))
    # 设置水印的透明度
    brush.Graphics.SetTransparency(0.3)
    brush.Graphics.Save()
    # 将坐标平移至指定位置
    brush.Graphics.TranslateTransform(brush.Size.Width/2 - image.Width/2, brush.Size.Height/2 - image.Height/2)
    # 在刷子上绘制水印图像
    brush.Graphics.DrawImage(image, 0.0, 0.0, float(image.Width), float(image.Height))
    brush.Graphics.Restore()
    # 在页面上绘制水印
    page.Canvas.DrawRectangle(brush, RectangleF(PointF(0.0, 0.0), page.Canvas.Size))

# 保存 PDF 文档
pdf.SaveToFile("output/PDF重复图像水印.pdf", FileFormat.PDF)
pdf.Close()

结果文档:
Python插入重复图像水印到PDF

本文介绍了如何使用Python在PDF文档页面上插入单张图像水印和重复图像水印。

更多PDF文档操作技巧请前往Spire.PDF for Python教程。

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

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

相关文章

HWOD:合并整型数组

一、知识点 合并整型数组目前有两种方法 合并数组并不一定需要真正的合并 1、下意识的方法 对两个整型数组分别排序,然后合并 2、不排序的方法 遍历两个数组,找出最小值,输出最小值。将两个数组中与最小值相等的位置置为超大值 重复以…

uniapp Android 插件开发教程

一、下载uniapp提供的SDK Android 离线SDK - 正式版 | uni小程序SDK 二、在uniapp创建一个项目 查看包名:发行--> 原生app 云打包 三、进入dcloud官网 开发者中心 进入 应用管理 --> 我的应用 --> 点击应用名称-->各平台信息-->新增 这里需要这…

k8s之helm入门

k8s之helm入门 helm是k8s的另外一个项目,相当于linux的yum,在yum仓库中,yum不光要解决包之间的依赖关系,还要提供具体的程序包,helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如hub.docker.com、私有仓库. helm提供了一个应用所需要的所有清单文件.比如…

【机器学习300问】77、什么是梯度消失和梯度爆炸?

一、梯度消失(Vanishing gradients) (1)定义 在训练深度神经网络时,随着误差梯度从输出层向输入层逐层回传,梯度可能因为连乘效应逐渐减小。当使用激活函数的导数的最大值小于1时,深度网络中越…

【软考】软件设计师中级

视频课 计算机组成原理 进制转换 定点数vs浮点数 校验码 计算机体系结构 指令系统 I/O 存储系统 直接映射:简单粗暴的死板派 全相联映射:跳脱的自由发挥派 组相联映射:折中派,组间直接映射&组内全相联映射 命中率&#xf…

百度网盘超级会员2024最新白嫖30天教程

百度网盘超级会员服务是百度网盘提供的一项高级服务,它为用户提供了许多特权和功能,旨在为用户带来更加便捷、高效的文件存储和管理体验。以下是关于百度网盘超级会员服务的详细介绍: 百度网盘VIP领取入口: 关注公众号回复&#x…

为什么选择TikTok直播专线而不是节点?

TikTok直播已成为许多商家的重要营销手段,而网络质量作为营销直播效果的关键因素,使得商家们开始应用TikTok直播专线。虽然与节点相比,专线的价格稍高,但更多商家都倾向于选择TikTok直播专线。那么,为什么TikTok直播更…

Java零基础入门到精通_Day 7

1.3 什么是类? 类是对现实生活中一类具有共同属性和行为的事物的抽象。 类的特点: 类是对象的数据类型 类是具有相同属性和行为的一组对象的集合 1.4 什么是对象的属性 属性:对象具有的各种特征,每个对象的每个属性都拥有特定的值。 1.5 什么是对象的行为 行为:对…

vue快速入门(三十三)scoped解决组件样式冲突

注释很详细&#xff0c;直接上代码 上一篇 新增内容 scoped解决样式冲突的用法 源码 MyHeader.vue <!-- 用于测试全局注册组件 --> <template><div id"myHeader"><h1>又可以愉快的学习啦</h1></div> </template><scri…

万物皆可计算|下一个风口:近内存计算-1

传统的冯诺依曼架构虽然广泛应用于各类计算系统&#xff0c;但其分离的数据存储与处理单元导致了数据传输瓶颈&#xff0c;特别是在处理内存密集型任务时&#xff0c;CPU或GPU需要频繁地从内存中读取数据进行运算&#xff0c;然后再将结果写回内存&#xff0c;这一过程涉及大量…

【idea插件】IDEA 书签Bookmarks 高效使用

当我们在查看源码时&#xff0c;由于源码调用链路很长可能涉及到非常多的类文件&#xff0c;查找起来并不容易。有时候可能还需要查找某段代码的入口函数&#xff0c;当类文件的代码量很大时&#xff0c;很难快速定位到代码段。 设置书签 要想将一行代码添加到 IDEA 的 Bookm…

创新电商模式:免单优选引领销售新潮流

免单优选&#xff0c;这一新颖的电商销售概念&#xff0c;通过独特的价格策略、奖励制度以及社交网络的融合应用&#xff0c;成功点燃了消费者的购买激情&#xff0c;引领销售迅猛增长。 一、合规经营&#xff0c;摒弃复杂奖励 免单优选坚守合法经营的原则&#xff0c;摒弃了复…

【点云语义分割】自适应一致性正则化的弱监督点云分割

Reliability-Adaptive Consistency Regularization for Weakly-Supervised Point Cloud Segmentation 摘要&#xff1a; 本文探讨了将弱监督学习中常用的一致性正则化应用于具有多种特定数据增强功能的点云学习中&#xff0c;而对这一问题的研究还不够深入。我们发现&#xff…

大数据操作第二天

文章目录 大数据命令的方式现在有三个命令的方式 启动一个计算圆周率的jar包方式什么是文件系统数据元数据传统的存储方式分布式存储方式元数据记录文件位置信息副本机制的方式 hafs 存储方式shell 操作大数据的方式创建目录查看文件目录下的方式上传文件的方式 大数据命令的方…

【若依】代码生成详细教程(单表、主从表、树形表增删改查)

若依代码生成开发接口 修改代码生成配置一、单表实现增删改查1. 新建数据库表结构2. 新建模块&#xff0c;解决项目依赖3. 启动项目&#xff0c;新建菜单4. 导入数据表&#xff0c;自动生成代码5. 将生成代码粘贴到对应的模块&#xff0c;执行生成的sql&#xff08;用于生成菜单…

【情侣博客网站】

效果图 PC端 建塔教程 第一步&#xff1a;下载网站源码&#xff08;在文章下方有下载链接&#xff09; 第二步&#xff1a;上传到服务器或虚拟主机&#xff0c;解压。 第三步&#xff1a;这一步很关键&#xff0c;数据库进行连接&#xff0c;看图 admin/connect.php就是这…

【学习笔记】Vue3源码解析:第五部分 - 实现渲染(2)

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第五部分-&#xff1a;&#xff08;对应课程的第33 - 35节&#xff09; 第33节&#xff1a;《讲解组件渲染流程》 1、在 render 函数中拿到虚拟dom vnode后…

WordPress 主题选择与自定义配置

最近我在使用wordpress网站进行建站。 我是使用的hostease的主机产品进行wordpress建站&#xff0c;在选择wordpress主题时颇为头疼。后来咨询了hostease的客服人员&#xff0c;他们家的技术人员提供了诸多帮助。在WordPress网站建设时&#xff0c;主题选择对于建立各类网站至关…

档案数字化能为企业带来什么帮助

档案数字化为企业带来以下帮助&#xff1a; 1. 空间节省&#xff1a;数字化档案可以减少实体档案的存储空间需求&#xff0c;不再需要大量的文件柜和文件存储空间&#xff0c;从而帮助企业节约办公场地。 2. 检索便捷&#xff1a;数字化档案可以通过关键词搜索、标签分类等方式…

fcrackzip工具的使用教程

下载fcrackzip软件包 查看版本 创建一个1.txt文本文件&#xff0c;然后把1.txt解压成1.zip&#xff0c;密码为007lyt fcackzip有两种使用方法 1、暴力破解 用法示例 fcrackzip -b -c 1a -l 1-10 -u 1.zip -b使用暴力破解 -c 指定掩码类型 a表示a-z&#xff0c;A表示A-Z&am…