在处理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文件