Python给PDF添加水印的代码步骤

 更新时间:2025年02月26日 10:29:32   作者:蜡笔小新星  
在本教程中,我们将学习如何使用 Python 编程语言以及 PyPDF2 和 reportlab 库来向 PDF 文档中添加水印,水印通常用于标记文档的版权信息、保密级别或其他重要通知,需要的朋友可以参考下

步骤 1:安装必要的库

首先,确保你已经安装了 PyPDF2 和 reportlab 库。如果尚未安装,可以使用以下命令通过 pip 安装它们:

pip install PyPDF2 reportlab

步骤 2:准备字体文件

由于我们要在水印中使用中文,因此需要准备一个支持中文的字体文件,例如 SimHei.ttf(黑体)。确保这个字体文件与你的 Python 脚本位于同一目录下,或者你知道它的完整路径。

步骤 3:编写 Python 脚本

接下来,我们编写一个 Python 脚本来生成水印并将其添加到现有的 PDF 文档中。

import io
from PyPDF2 import PdfWriter, PdfReader
from reportlab.lib import pagesizes
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas

# 注册字体,以便在 PDF 中使用中文
pdfmetrics.registerFont(TTFont('SimHei', 'SimHei.ttf'))

# 生成水印文件的函数
def create_water_mark(text):
    packet = io.BytesIO()
    # 创建一个新的 PDF 页面作为水印
    my_canvas = canvas.Canvas(packet, pagesizes.A4)
    # 设置水印字体和大小
    my_canvas.setFont("SimHei", 20)
    # 设置填充色为黑色
    my_canvas.setFillColorRGB(0, 0, 0)
    # 设置透明度(0.0 完全透明,1.0 完全不透明)
    my_canvas.setFillAlpha(0.1)
    # 旋转字体以增加水印效果
    my_canvas.rotate(30)
    # 在页面上多次绘制水印文本,以形成水印图案
    for i in range(3, 24, 10):
        for j in range(-5, 30, 5):
            my_canvas.drawString(i * cm, j * cm, text)
    my_canvas.save()
    packet.seek(0)
    # 返回水印页面的 PdfReader 对象
    return PdfReader(packet)

# 将水印添加到 PDF 文件的函数
def add_watermark(input_pdf_path, output_pdf_path, watermark_text):
    # 创建水印
    watermark = create_water_mark(watermark_text)
    # 读取输入 PDF 文件
    pdf_reader = PdfReader(input_pdf_path)
    pdf_writer = PdfWriter()
    # 遍历输入 PDF 的每一页,并添加水印
    for page in pdf_reader.pages:
        page.merge_page(watermark.pages[0])
        pdf_writer.add_page(page)
    # 将带有水印的 PDF 写入输出文件
    with open(output_pdf_path, "wb") as output_pdf:
        pdf_writer.write(output_pdf)

# 主程序
if __name__ == '__main__':
    # 输入和输出 PDF 文件的路径
    input_pdf = r"input.pdf"  # 替换为你的输入 PDF 路径
    output_pdf = r"output_with_watermark.pdf"  # 期望的输出 PDF 路径
    watermark_text = "添加水印测试文本"  # 水印文本内容
    # 调用函数添加水印
    add_watermark(input_pdf, output_pdf, watermark_text)

步骤 4:运行脚本

将上述脚本保存为一个 .py 文件,并确保 SimHei.ttf 字体文件与脚本位于同一目录下。然后,在命令行中运行该脚本:

python your_script_name.py

将 your_script_name.py 替换为你保存脚本的文件名。

步骤 5:检查结果

脚本运行完成后,检查指定的输出目录,你应该会看到一个名为 output_with_watermark.pdf 的新文件。打开它,你将看到每一页都添加了指定的水印文本。

注意事项

  • 确保 SimHei.ttf 字体文件与你的脚本在同一目录下,或者正确指定其路径。
  • reportlab 库用于生成水印页面,而 PyPDF2 库用于读取和写入 PDF 文件以及合并页面。
  • 水印的透明度和旋转角度可以根据需要进行调整。
  • 本教程中的代码是一个基本示例,可能需要根据具体情况进行修改和优化。

到此这篇关于Python给PDF添加水印的代码步骤的文章就介绍到这了,更多相关Python PDF添加水印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python pandas中read_csv参数示例详解

    Python pandas中read_csv参数示例详解

    使用pandas做数据处理的第一步就是读取数据,数据源可以来自于各种地方,csv文件便是其中之一,下面这篇文章主要给大家介绍了关于Python pandas中read_csv参数详解的相关资料,需要的朋友可以参考下
    2023-01-01
  • python3使用matplotlib绘制散点图

    python3使用matplotlib绘制散点图

    这篇文章主要为大家详细介绍了python3使用matplotlib绘制散点图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • python在windows和linux下获得本机本地ip地址方法小结

    python在windows和linux下获得本机本地ip地址方法小结

    这篇文章主要介绍了python在windows和linux下获得本机本地ip地址方法,实例分析了Python获得IP地址的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • 用Python生成艺术之分形与算法绘图实践

    用Python生成艺术之分形与算法绘图实践

    这篇文章主要介绍了用Python生成艺术之分形与算法绘图实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-03-03
  • python开发中module模块用法实例分析

    python开发中module模块用法实例分析

    这篇文章主要介绍了python开发中module模块用法,以实例形式较为详细的分析了Python中模块的功能、定义及相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Python Matplotlib绘制箱线图boxplot()函数详解

    Python Matplotlib绘制箱线图boxplot()函数详解

    箱线图一般用来展现数据的分布(如上下四分位值、中位数等),同时也可以用箱线图来反映数据的异常情况,下面这篇文章主要给大家介绍了关于Python Matplotlib绘制箱线图boxplot()函数的相关资料,需要的朋友可以参考下
    2022-07-07
  • python实现跨进程(跨py文件)通信示例

    python实现跨进程(跨py文件)通信示例

    本文主要介绍了python实现跨进程(跨py文件)通信示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 如何使用conda和pip批量安装Python包

    如何使用conda和pip批量安装Python包

    这篇文章主要介绍了如何使用conda和pip批量安装Python包问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • python实现SMTP邮件发送功能

    python实现SMTP邮件发送功能

    这篇文章主要为大家详细介绍了python实现SMTP邮件发送功能的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • flask-socketio实现WebSocket的方法

    flask-socketio实现WebSocket的方法

    这篇文章主要介绍了flask-socketio实现WebSocket的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07

最新评论