头图

大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。

更多Python学习内容:http://ipengtao.com

在日常工作中,处理PDF文件是非常常见的需求。为了保护PDF文件的内容,我们可能需要对其进行加密。同时,为了防止文件被未经授权的复制和使用,添加水印也是一种有效的方法。本文将详细介绍如何使用Python对PDF文件进行加密和添加水印的操作,包含详细的示例代码,帮助全面掌握这一技能。

准备工作

在开始之前,需要安装一些必要的Python库:

  • PyPDF2:用于处理PDF文件的基本操作,包括读取、写入、加密等。
  • reportlab:用于创建PDF文件和添加水印。

可以使用以下命令安装这些库:

pip install PyPDF2 reportlab

PDF文件加密

加密PDF文件

使用PyPDF2库来对PDF文件进行加密。以下是一个示例代码,用于加密一个PDF文件:

import PyPDF2

def encrypt_pdf(input_pdf, output_pdf, password):
    pdf_reader = PyPDF2.PdfFileReader(input_pdf)
    pdf_writer = PyPDF2.PdfFileWriter()

    for page_num in range(pdf_reader.numPages):
        page = pdf_reader.getPage(page_num)
        pdf_writer.addPage(page)

    pdf_writer.encrypt(password)

    with open(output_pdf, 'wb') as output_file:
        pdf_writer.write(output_file)

    print(f"PDF文件 {input_pdf} 已加密,并保存为 {output_pdf}")

# 示例使用
encrypt_pdf('example.pdf', 'encrypted_example.pdf', 'mypassword')

在这个示例中,读取了一个PDF文件,将其内容逐页添加到PdfFileWriter对象,然后使用encrypt方法对其进行加密,最后将加密后的PDF文件保存到新的文件中。

PDF文件添加水印

创建水印PDF

首先,需要使用reportlab库创建一个包含水印的PDF文件。

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

def create_watermark(watermark_text, output_pdf):
    c = canvas.Canvas(output_pdf, pagesize=letter)
    width, height = letter

    c.saveState()
    c.translate(width/2, height/2)
    c.rotate(45)
    c.setFont("Helvetica", 40)
    c.setFillColorRGB(0.5, 0.5, 0.5, 0.5)  # 半透明灰色
    c.drawCentredString(0, 0, watermark_text)
    c.restoreState()

    c.save()

# 示例使用
create_watermark('CONFIDENTIAL', 'watermark.pdf')

在这个示例中,使用reportlab创建了一个PDF文件,并在中间添加了一条旋转的半透明水印。

将水印添加到PDF文件

接下来,使用PyPDF2库将水印PDF文件添加到目标PDF文件的每一页。

import PyPDF2

def add_watermark(input_pdf, watermark_pdf, output_pdf):
    pdf_reader = PyPDF2.PdfFileReader(input_pdf)
    watermark_reader = PyPDF2.PdfFileReader(watermark_pdf)
    pdf_writer = PyPDF2.PdfFileWriter()

    watermark_page = watermark_reader.getPage(0)

    for page_num in range(pdf_reader.numPages):
        page = pdf_reader.getPage(page_num)
        page.mergePage(watermark_page)
        pdf_writer.addPage(page)

    with open(output_pdf, 'wb') as output_file:
        pdf_writer.write(output_file)

    print(f"水印已添加到PDF文件 {input_pdf},并保存为 {output_pdf}")

# 示例使用
add_watermark('example.pdf', 'watermark.pdf', 'watermarked_example.pdf')

在这个示例中,读取了目标PDF文件和水印PDF文件,将水印页合并到目标PDF文件的每一页中,最后保存为新的PDF文件。

综合示例:加密并添加水印

可以结合以上两个步骤,首先对PDF文件添加水印,然后对其进行加密。

以下是完整的示例代码:

import PyPDF2
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

def create_watermark(watermark_text, output_pdf):
    c = canvas.Canvas(output_pdf, pagesize=letter)
    width, height = letter

    c.saveState()
    c.translate(width/2, height/2)
    c.rotate(45)
    c.setFont("Helvetica", 40)
    c.setFillColorRGB(0.5, 0.5, 0.5, 0.5)
    c.drawCentredString(0, 0, watermark_text)
    c.restoreState()

    c.save()

def add_watermark(input_pdf, watermark_pdf, output_pdf):
    pdf_reader = PyPDF2.PdfFileReader(input_pdf)
    watermark_reader = PyPDF2.PdfFileReader(watermark_pdf)
    pdf_writer = PyPDF2.PdfFileWriter()

    watermark_page = watermark_reader.getPage(0)

    for page_num in range(pdf_reader.numPages):
        page = pdf_reader.getPage(page_num)
        page.mergePage(watermark_page)
        pdf_writer.addPage(page)

    with open(output_pdf, 'wb') as output_file:
        pdf_writer.write(output_file)

def encrypt_pdf(input_pdf, output_pdf, password):
    pdf_reader = PyPDF2.PdfFileReader(input_pdf)
    pdf_writer = PyPDF2.PdfFileWriter()

    for page_num in range(pdf_reader.numPages):
        page = pdf_reader.getPage(page_num)
        pdf_writer.addPage(page)

    pdf_writer.encrypt(password)

    with open(output_pdf, 'wb') as output_file:
        pdf_writer.write(output_file)

# 示例使用
create_watermark('CONFIDENTIAL', 'watermark.pdf')
add_watermark('example.pdf', 'watermark.pdf', 'watermarked_example.pdf')
encrypt_pdf('watermarked_example.pdf', 'encrypted_watermarked_example.pdf', 'mypassword')

在这个综合示例中,首先创建了一个水印PDF文件,然后将水印添加到目标PDF文件的每一页,最后对添加了水印的PDF文件进行加密。

总结

本文详细介绍了如何使用Python对PDF文件进行加密和添加水印。通过安装并使用PyPDF2reportlab库,可以轻松实现这些操作。文章首先介绍了如何使用PyPDF2对PDF文件进行加密,确保文件内容的安全性。接着,展示了如何使用reportlab创建水印PDF文件,并将其与目标PDF文件合并。最后,通过一个综合示例,将加密和添加水印的步骤结合在一起,演示了如何实现一个完整的PDF处理流程。这些技巧可以帮助大家在实际项目中有效地保护和处理PDF文件。


涛哥聊Python
59 声望37 粉丝