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

Python办公自动化教程(004):PDF添加水印

1.4 PDF文档水印添加

【1】安装库

pip install reportlab
pip install PyPDF2

【2】代码

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

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", 40)
    # 填充色
    my_canvas.setFillColorRGB(0, 0, 0)
    # 透明度
    my_canvas.setFillAlpha(0.1)
    # 设置字体旋转度数
    my_canvas.rotate(15)
    # x轴的3cm处,到24结束,步长是10
    for i in range(3, 24, 10):
        # y轴的
        for j in range(-5, 30, 5):
            my_canvas.drawString(i * cm, j * cm, text)
    my_canvas.save()
    packet.seek(0)
    return PdfReader(packet)


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()

    # 遍历每一页,将水印添加到每一页
    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__':
    # 示例使用
    input_pdf = "./file/test.pdf"  # 输入的 PDF 文件路径
    output_pdf = "output_with_watermark.pdf"  # 输出的 PDF 文件路径
    watermark_text = "不写八个"  # 水印文本

    add_watermark(input_pdf, output_pdf, watermark_text)

【3】代码解释

  1. create_watermark:这个函数使用 ReportLab 创建一个包含水印文本的 PDF 文件。水印文本的位置和字体大小可以根据需要调整。
  2. add_watermark:该函数读取输入的 PDF 文件,并将水印应用到每一页。最后,生成的新 PDF 文件将保存到指定的输出路径。
  3. 通过设置 input_pdf, output_pdfwatermark_text,你可以轻松地将水印添加到任何 PDF 文件。

【4】生成效果

在这里插入图片描述


http://www.kler.cn/a/322052.html

相关文章:

  • Spring Boot用Spring Security + JWT + MySQL实现基于Token的身份认证
  • Python基础知识 (七)--匿名函数
  • 产教专家共议数字时代下的数据思维人才培养
  • 一文系统了解软件检测实验室CNAS认可,文件依据、资源准备、流程、预算
  • 鸿蒙 OS 开发单词打卡 APP 项目实战 20240922 笔记和源码分享
  • SpringBoot图书馆管理:阿博系统教程
  • Android 去掉SIM卡插拔出现的重启弹窗提示
  • 004_动手实现MLP(pytorch)
  • 啥?Bing搜索古早BUG至今未改?
  • 爱的旅程 再次起航 朵拉朵尚公益行为更多的孩子点亮梦想
  • Windows开发工具使用技巧
  • Python 二次开发金橙子打印软件:开启高效打印新旅程
  • [vulnhub] Jarbas-Jenkins
  • 【含文档】基于Springboot+Vue的高校失物招领平台(含源码+数据库+lw)
  • 机器学习笔记(一)初识机器学习
  • 使用docker形式部署prometheus+alertmanager+钉钉告警
  • vue3使用provide/inject异步传递爷孙组件数据
  • 望繁信科技CTO李进峰受邀在上海外国语大学开展流程挖掘专题讲座
  • C/C++语言基础--C++构造函数、析构函数、深拷贝与浅拷贝等等相关知识讲解
  • 论文 | Reframing Instructional Prompts to GPTk’s Language