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

使用PyMuPDF添加PDF水印

使用Python添加PDF水印的博客文章。
C:\pythoncode\new\pdfwatermark.py
在这里插入图片描述
在这里插入图片描述

使用Python在PDF中添加水印

在日常工作中,我们经常需要对PDF文件进行处理。其中一项常见的需求是向PDF文件添加水印,以保护文件的版权或标识文件的来源。本文将介绍如何使用Python编程语言和PyMuPDF库在PDF文件中添加水印。

准备工作

在开始之前,确保已经安装了以下组件:

  • Python编程环境
  • PyMuPDF库

可以使用pip命令安装PyMuPDF库:


pip install PyMuPDF

编写代码

首先,我们需要导入所需的库:

import fitz

接下来,我们创建一个函数来添加水印到PDF文件的每一页:

def add_watermark_to_pdf(pdf_path, watermark_text, output_path):try:doc = fitz.open(pdf_path)watermark_text = str(watermark_text)for page in doc:textbox = fitz.Rect(100, 100, 300, 200)  # 设置水印的位置和大小page.insert_textbox(textbox, watermark_text, fontsize=20, rotate=90)doc.save(output_path)doc.close()print("水印添加成功!")except Exception as e:print("添加水印时出错:", str(e))

在上述代码中,我们打开PDF文件,遍历每一页,然后使用insert_textbox()方法将水印添加到每一页中。

使用示例

接下来,我们可以使用上述函数来添加水印。

pdf_path = "input.pdf"
watermark_text = "我的水印"
output_path = "output.pdf"add_watermark_to_pdf(pdf_path, watermark_text, output_path)

在上述示例中,我们指定了输入PDF文件的路径、要添加的水印文本和输出文件的路径。运行代码后,将会在输出路径生成带有水印的PDF文件。

全部代码

import wx
import fitzclass WatermarkFrame(wx.Frame):def __init__(self, parent, title):super(WatermarkFrame, self).__init__(parent, title=title, size=(400, 200))panel = wx.Panel(self)# 创建选择文件按钮self.file_picker = wx.FilePickerCtrl(panel, style=wx.FLP_OPEN)# 创建水印文本输入框self.watermark_text = wx.TextCtrl(panel, style=wx.TE_PROCESS_ENTER)# 创建保存文件夹按钮self.save_folder_picker = wx.DirPickerCtrl(panel, style=wx.DIRP_USE_TEXTCTRL)# 创建生成按钮generate_button = wx.Button(panel, label='生成')generate_button.Bind(wx.EVT_BUTTON, self.on_generate_button_click)# 创建布局sizer = wx.BoxSizer(wx.VERTICAL)sizer.Add(self.file_picker, proportion=0, flag=wx.ALL|wx.EXPAND, border=10)sizer.Add(self.watermark_text, proportion=0, flag=wx.ALL|wx.EXPAND, border=10)sizer.Add(self.save_folder_picker, proportion=0, flag=wx.ALL|wx.EXPAND, border=10)sizer.Add(generate_button, proportion=0, flag=wx.ALL|wx.CENTER, border=10)panel.SetSizer(sizer)def on_generate_button_click(self, event):file_path = self.file_picker.GetPath()watermark_text = self.watermark_text.GetValue()save_folder = self.save_folder_picker.GetPath()if file_path and watermark_text and save_folder:try:doc = fitz.open(file_path)# watermark_text = watermark_text.encode('utf-8')watermark_text = str(watermark_text)for page in doc:textbox = fitz.Rect(100, 100, 300, 200)  # 水印的位置和大小# page.insert_textbox(textbox, watermark_text, fontsize=20, rotate=45)page.insert_textbox(textbox, watermark_text, fontsize=20, rotate=90)# output_file_path = f"{save_folder}/watermarked_{file_path.split('/')[-1]}"output_file_path = f"outputwatermark.pdf"doc.save(output_file_path)doc.close()wx.MessageBox("水印添加成功!", "成功", wx.OK | wx.ICON_INFORMATION)except Exception as e:wx.MessageBox(str(e), "错误", wx.OK | wx.ICON_ERROR)else:wx.MessageBox("请选择文件、输入水印文本和保存文件夹!", "错误", wx.OK | wx.ICON_ERROR)if __name__ == '__main__':app = wx.App()frame = WatermarkFrame(None, "添加水印")frame.Show()app.MainLoop()

总结

通过使用Python和PyMuPDF库,我们可以轻松地向PDF文件添加水印。可以根据需求定制水印的位置、大小和旋转角度。这种方法不仅简单高效,还可以自动化处理大量的PDF文件。

相关文章:

使用PyMuPDF添加PDF水印

使用Python添加PDF水印的博客文章。 C:\pythoncode\new\pdfwatermark.py 使用Python在PDF中添加水印 在日常工作中,我们经常需要对PDF文件进行处理。其中一项常见的需求是向PDF文件添加水印,以保护文件的版权或标识文件的来源。本文将介绍如何使用Py…...

window如何实时刷新日志文件

1 安装windows git 下载地址:Git - Downloading Package (git-scm.com) 2 打开git bash 输入tail.exe -f 日志文件路径...

动态代理的两个使用方式(手动实现+SpringAOP实现)-Demo

一、手动实现 1、具体代码 package com.xch.proxy;/*** 具体业务接口** author XuChenghe* date 2023/8/18 15:09*/ public interface Star {/*** 唱歌方法** param name* return*/String sing(String name);/*** 跳舞方法*/void dance();} package com.xch.proxy;/*** 具体…...

面试话术(MQ+mybatis+nginx+redis+ssm+mysql+linux)

面试话术 RabbitMq1、介绍一下rabbitmq2、如何保证消息确定消息发送成功,并且被消费成功,有什么保障措施3、如何保证消息不被重复消费4、RabbitMQ 宕机了怎么处理 授权话术1、你给我说一下授权认证(登陆注册)的逻辑2、说一下jwt3、…...

JSON的理解

文章目录 1、什么是JSON2、为什么要用JSON3、JSON的格式规定3.1 对象(0bject):对应着JS中的对象3.2 数组(Array):对应着JS中的数组形式3.3 简单形式:对应着JS中的基础数据类型 4、JSON和Js的转换5、JSON对象…...

面试热题(二叉树的最大路径)

路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给定一个二叉树的根节点 root…...

C#设计模式之--六大原则 开闭原则

设计模式六大原则是单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。它们不是要我们刻板的遵守,而是根据实际需要灵活运用。只要对它们的遵守程度在一个合理的范围内,努为做到一个良好的设计。本文主要介绍一下.NET(C#)…...

编写Dockerfile制作自己的镜像并推送到私有仓库

说明:我将用到的私有仓库是Harbor,安装教程参考我的这一篇文章: 安装搭建私有仓库Harbor_Word_Smith_的博客-CSDN博客 一、案例1 1、要求 编写Dockerfile制作Web应用系统nginx镜像,生成镜像nginx:v1.1,并推送其到私…...

华为OD-分积木/分苹果

题目描述 哥哥弟弟分一堆积木,每块积木重量不同。弟弟要求平分两组,每组数量可以不同但总重量必须相等。 然而弟弟只会二进制并且加法不进位。例如三块积木 3,5,6 分成两组 [3] 和 [5,6] 弟弟认为 5(二进制1001)加上6&#xff08…...

Mysql的引擎有哪些?支持事物么?DB储存引擎有哪些?

Mysql的引擎有哪些?支持事物么?DB储存引擎有哪些? MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用: MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCH…...

【懒加载】js实现懒加载、vue实现图片懒加载指令

懒加载 延迟加载,对于一个很长的页面,优先加载可视区域的内容,其他部分等进入可视区域时再加载 懒加载作用 是一种网页性能优化的方式,它能极大的提升用户体验。比如一个页面中有很多图片,但是首屏只出现几张&#…...

微信小程序教学系列(7)

第七章:小程序安全和权限管理 第一节:小程序安全性保障 在开发小程序时,我们要时刻牢记小程序的安全性。毕竟,我们可不希望我们的小程序被黑客入侵或者用户的隐私被泄露。所以,让我们一起来了解一下如何保障小程序的…...

Android 9.0 kenel和frameworks中修改ram运行内存的功能实现

1.前言 在9.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,在产品后续订单中,在某些机型中需要升级下系统内核配置,项目时间比较仓促,所以 来不及对硬件重新定制,就需要软件方面在ram运行内存的容量大小方面作假,修改ram真实的大小容量,所以就需要在ken…...

PHP实践:获取网络上图片的长宽以及图片类型

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责…...

使用 DPO 微调 Llama 2

简介 基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback,RLHF) 事实上已成为 GPT-4 或 Claude 等 LLM 训练的最后一步,它可以确保语言模型的输出符合人类在闲聊或安全性等方面的期望。然而,它也给 NLP 引入了一些 RL 相关…...

数据库——事务,事务隔离级别

文章目录 什么是事务?事务的特性(ACID)并发事务带来的问题事务隔离级别实际情况演示脏读(读未提交)避免脏读(读已提交)不可重复读可重复读防止幻读(可串行化) 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务最经典也经常被拿出…...

对《VB.NET通过VB6 ActiveX DLL调用PowerBasic及FreeBasic动态库》的改进

《VB.NET通过VB6 ActiveX DLL调用PowerBasic及FreeBasic动态库》使用的Activex DLL公共对象是需要先注册的。https://blog.csdn.net/weixin_45707491/article/details/132437502?spm1001.2014.3001.5501 Activex DLL事前注册,一次多用说起来也不是啥大问题&#x…...

【PHP】数据类型运算符位运算

文章目录 数据类型简单(基本)数据类型:4个小类复合数据类型:2个小类特殊数据类型:2个小类类型转换类型判断整数类型浮点类型布尔类型 运算符赋值运算符算术运算符比较运算符逻辑运算符连接运算符错误抑制符三目运算符自…...

使用 Nacos 作为 Spring Boot 配置中心

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

微服务 Eureka

Eureka Eureka是Netflix开源的一个用于构建基于微服务架构的服务发现和注册中心技术。在微服务架构中,系统被拆分成多个小型、自治的服务,每个服务负责特定的业务功能。这些服务需要能够相互发现和通信,这就是Eureka所提供的功能。 Eureka主…...

教你 .NET Core API 怎么和数据库表一一对应

不用复杂理论,直接照做就能成功! 一、核心规则(记住这 4 句) 类 = 表 类名 = 表名 属性 = 字段 属性名 = 字段名 二、一步一步教你对应(超级简单) 1)数据库有一张表 → 你就写一个类 例如你数据库里有表: sql Users (Id int primary key identity,Name nvarchar(5…...

apt-offline终极指南:离线环境下的APT包管理解决方案

apt-offline终极指南:离线环境下的APT包管理解决方案 【免费下载链接】apt-offline Offline APT Package Manager 项目地址: https://gitcode.com/gh_mirrors/ap/apt-offline 你是否曾面临这样的困境?服务器在安全隔离的网络中,无法直…...

字节开源AI神器DeerFlow,4.1万星标刷屏,普通人免费就能用

文章目录这玩意儿不是ChatGPT那种"嘴炮型"选手35k星标怎么来的?字节这次把"龙虾"养明白了多智能体协作:不是一个人在战斗沙箱执行:让AI真的"动手"干活对比OpenAI:免费、本地、可控普通人怎么上手&a…...

Java高频面试题:RocketMQ有哪些使用场景?

大家好,我是锋哥。今天分享关于【Java高频面试题:RocketMQ有哪些使用场景?】面试题 。希望对大家有帮助;Java高频面试题:RocketMQ有哪些使用场景?RocketMQ 是阿里巴巴开源的一款分布式消息中间件&#xff0…...

Deepfake Offensive Toolkit安全认证考试结果申诉处理流程

Deepfake Offensive Toolkit安全认证考试结果申诉处理流程 【免费下载链接】dot The Deepfake Offensive Toolkit 项目地址: https://gitcode.com/gh_mirrors/dot/dot Deepfake Offensive Toolkit(以下简称dot)作为一款专业的深度伪造工具&#x…...

2026年主流接口测试平台慢因分析与选型参考

2026年主流接口测试平台慢因分析与选型参考 核心观点摘要 2026年接口测试响应慢核心诱因可归为三类:工具本身并发调度能力不足、协议适配不全导致额外转码开销、缺少AI智能链路优化能力,多数企业接口测试效率低与工具选型不当直接相关。本次盘点覆盖当前…...

终极指南:如何在Windows电脑上直接安装Android应用

终极指南:如何在Windows电脑上直接安装Android应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK Installer是一款专为Windows系统设计的Android应用安…...

极域电子教室破解神器:JiYuTrainer 让课堂学习更自由高效

极域电子教室破解神器:JiYuTrainer 让课堂学习更自由高效 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否厌倦了在计算机课堂上被极域电子教室完全控制&#xf…...

CCC 数字钥匙 Release 3:BLE/UWB与NFC融合的无钥匙进入系统解析

1. CCC数字钥匙Release 3的技术革新 想象一下这样的场景:你双手提着购物袋走向爱车,距离3米时车灯自动点亮,1.5米时车门悄然解锁,拉开车门的瞬间引擎已经启动——这就是CCC数字钥匙Release 3带来的无感化体验。作为车联网联盟&…...

amlogic-s9xxx-armbian项目全指南:从闲置设备到智能服务器的转变

amlogic-s9xxx-armbian项目全指南:从闲置设备到智能服务器的转变 【免费下载链接】amlogic-s9xxx-armbian amlogic-s9xxx-armbian: 该项目提供了为Amlogic、Rockchip和Allwinner盒子构建的Armbian系统镜像,支持多种设备,允许用户将安卓TV系统…...