侧边栏壁纸
博主头像
Tool博主等级

行动起来,活在当下

  • 累计撰写 27 篇文章
  • 累计创建 3 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

源码5.python批量向PDF文件添加中文水印

Jimmie
2024-01-26 / 0 评论 / 0 点赞 / 7 阅读 / 4310 字
温馨提示:
收藏保存网址不迷路:www.jimmie.top,若内容或图片失效,请反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在处理PDF文件时,我们经常需要在PDF中添加水印,例如公司的标志或者版权信息等。本文将详细介绍如何使用Python批量向PDF文件添加中文水印的过程。

导入必要的库 📚

首先,我们需要导入几个Python库来帮助我们完成任务:

import os
from time import sleep
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from PyPDF2 import PdfReader, PdfWriter
  • os:用于处理文件和目录。

  • time:用于程序中的延时。

  • reportlab:用于生成PDF文件和添加文本。

  • PyPDF2:用于读取和写入PDF文件,以及合并PDF页面。

注册字体 🖋

在添加中文水印之前,我们需要注册一个能够支持中文的字体,这里使用的是宋体。

pdfmetrics.registerFont(TTFont('songti', 'simsun.ttc'))

生成水印PDF 🌊

我们首先创建一个只包含水印的PDF文件,这个文件稍后将被用来添加到其他PDF文件上。

def generate_watermark_pdf(content, watermark_pdf):
    c = canvas.Canvas(watermark_pdf, pagesize=(21 * cm, 29.7 * cm))
    c.translate(10 * cm, 12 * cm)
    c.setFont('songti', 23)
    c.setFillColorRGB(0.5, 0.5, 0.5)
    c.rotate(45)
    c.drawString(-7 * cm, 0 * cm, content)
    c.drawString(7 * cm, 0 * cm, content)
    c.drawString(0 * cm, 7 * cm, content)
    c.drawString(0 * cm, -7 * cm, content)
    c.save()

合并水印到PDF 📑

接下来,我们需要将生成的水印PDF合并到目标PDF文件中。

def insert_watermark_to_pdf(input_pdf, output_pdf, watermark_pdf):
    watermark = PdfReader(watermark_pdf)
    watermark_page = watermark.pages[0]
    pdf = PdfReader(input_pdf, strict=False)
    pdf_writer = PdfWriter()
    for page_num in range(len(pdf.pages)):
        page = pdf.pages[page_num]
        page.merge_page(watermark_page)
        pdf_writer.add_page(page)
    with open(output_pdf, 'wb') as output_file:
        pdf_writer.write(output_file)

批量添加水印功能 🗂

最后,我们编写一个函数来批量处理一个文件夹中的所有PDF文件,为它们添加水印。

def add_watermark_to_pdf(input_directory, output_directory, watermark_text):
    if not os.path.isdir(input_directory) or not os.path.isdir(output_directory):
        print('文件夹不存在!5秒后自动退出')
        sleep(5)
        return

    watermark_pdf = os.path.join(output_directory, 'watermark.pdf')
    generate_watermark_pdf(watermark_text, watermark_pdf)

    for root, dirs, files in os.walk(input_directory):
        for file_name in files:
            if file_name.endswith('.pdf'):
                input_pdf = os.path.join(root, file_name)
                output_pdf = os.path.join(output_directory, file_name)
                insert_watermark_to_pdf(input_pdf, output_pdf, watermark_pdf)
                print(f'文件: {output_pdf} 添加水印成功!')

    os.remove(watermark_pdf)

主函数入口 🚪

最后,我们定义了一个主函数,用于接收用户输入并调用上述功能。

if __name__ == '__main__':
    input_directory = input("请输入源文件所在的路径:")
    output_directory = input("请输入输出文件保存的路径:")
    watermark_text = input("请输入需要添加的水印文字:")
    add_watermark_to_pdf(input_directory, output_directory, watermark_text)
    print(f"{input_directory}文件夹内所有pdf添加水印完成!")
    sleep(10)

这段代码是一个完整的Python脚本,可以用来批量为PDF文件添加中文水印。用户只需运行这个脚本,并按照提示输入相关信息即可。

如果不能自行组合代码,可联系作者免费获取完整python文件

jimmie.webp

  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
  3. QQ打赏

    qrcode qq
博主关闭了所有页面的评论