使用PyMuPDF添加PDF水印

本文介绍了如何使用Python和PyMuPDF库在PDF文件中添加水印,包括安装所需库、编写添加水印函数以及提供使用示例,展示了如何定制水印位置和输出文件路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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 fitz

class 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 添加水印 PyMuPDF 是一个功能强大的库,用于处理 PDF 和电子书文件。通过此库可以轻松实现向文档添加水印的功能。以下是具体方法: #### 安装依赖项 在开始之前,请确保已安装 `PyMuPDF` 库。可以通过 pip 命令完成安装: ```bash pip install pymupdf ``` #### 实现代码示例 下面展示了一个完整的 Python 脚本,演示如何利用 PyMuPDFPDF 文件中的每一页添加文字或图片形式的水印。 ##### 文字水印 以下脚本展示了如何将自定义的文字作为水印嵌入到 PDF 的每一页面上。 ```python import fitz # PyMuPDF def add_text_watermark(pdf_path, output_pdf_path, watermark_text): doc = fitz.open(pdf_path) # 打开原始 PDF 文件[^5] for page_num in range(len(doc)): page = doc.load_page(page_num) # 加载当前页 # 设置字体大小和颜色 text_position = (50, 50) # 左下角位置坐标 font_size = 20 color = (1, 0, 0) # RGB 颜色值表示红色 # 插入文本并设置样式 page.insert_text(text_position, watermark_text, fontsize=font_size, fill=color) doc.save(output_pdf_path) # 将修改后的 PDF 存储至新路径 doc.close() # 使用函数 add_text_watermark("input.pdf", "output_with_watermark.pdf", "Confidential Document") ``` ##### 图片水印 如果希望使用图像作为水印,则可采用如下方式加载外部图片资源,并将其放置于各页面之上。 ```python import fitz # PyMuPDF def add_image_watermark(pdf_path, output_pdf_path, img_path): doc = fitz.open(pdf_path) # 打开原始 PDF 文件[^6] rect = fitz.Rect(50, 50, 150, 150) # 定义矩形区域来定位图片 for page_num in range(len(doc)): page = doc.load_page(page_num) # 加载当前页 # 插入图片到指定位置 page.insert_image(rect, filename=img_path) doc.save(output_pdf_path) # 保存带有水印的新版本 PDF doc.close() # 使用函数 add_image_watermark("input.pdf", "output_with_image_watermark.pdf", "watermark.png") ``` 上述两段程序分别实现了基于 **文字** 或者 **图片** 形式的水印效果。可以根据实际需求调整参数配置比如透明度、旋转角度等进一步优化显示风格[^7]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值