使用Python批量处理文件并添加水印

前言

在日常工作中,我们经常需要将不同格式的文档转换为PDF,并给这些PDF添加水印以保护内容或标注来源。本文将介绍如何使用Python来实现这一功能,包括从Word文档到PDF的转换、图片转PDF以及向PDF文件添加文本水印。我们将使用PyMuPDF(也称为fitz)、pdf2imageimg2pdfcomtypes等库。

准备工作

首先确保安装了以下所需的Python库:

  • PyMuPDFfitz:用于操作PDF文件。
  • pdf2image:将PDF页面转换为图像。
  • img2pdf:将图像转换为PDF。
  • comtypes:仅适用于Windows系统,用来与Microsoft Office进行交互,实现Word到PDF的转换。

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

pip install PyMuPDF pdf2image img2pdf comtypes

代码详解

1. 将Word文档转换为PDF

这部分代码定义了一个函数doc_to_pdf,它接受两个参数:输入文件路径input_file和输出文件路径output_file。该函数利用comtypes库调用Word应用程序打开.docx文件,并将其保存为PDF格式。

def doc_to_pdf(input_file, output_file):
    word = comtypes.client.CreateObject('Word.Application')
    doc = word.Documents.Open(input_file)
    doc.SaveAs(output_file, FileFormat=17)  # 17表示PDF格式
    doc.Close()
    word.Quit()

2. 图像文件转换为PDF

此段代码定义了image_to_pdf函数,接收图像文件路径image_path和目标PDF文件路径pdf_path作为参数。通过convert_from_path方法将图像文件转换成一个图像列表,再由convert方法转换为PDF格式。

def image_to_pdf(image_path, pdf_path):
    with open(pdf_path, "wb") as f:
        f.write(convert(convert_from_path(image_path)))

3. 给PDF添加文本水印

add_watermark函数负责给指定的PDF文件添加文本水印。它接收三个参数:原始PDF文件路径input_pdf、输出PDF文件路径output_pdf以及要添加的水印文本text

def add_watermark(input_pdf, output_pdf, text):
    document = fitz.open(input_pdf)
    for page in document:
        rect = page.rect
        shape = page.new_shape()
        shape.insert_textbox(rect, text,
                             fontsize=50, color=(0.9, 0.9, 0.9), rotate=-45,
                             fontname="helv", align=fitz.TEXT_ALIGN_CENTER)
        shape.finish()
    document.save(output_pdf)

4. 主程序逻辑

主函数main()设置了输入文件夹folder_path和输出文件夹output_folder,同时定义了默认的水印文本watermark_text。接下来遍历输入文件夹中的所有文件,根据文件扩展名决定执行的操作。

def main():
    folder_path = 'your_input_folder'  # 输入文件夹路径
    output_folder = 'your_output_folder'  # 输出文件夹路径
    watermark_text = "Sample Watermark"  # 水印内容
    
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)
        base_name, ext = os.path.splitext(filename)
        output_pdf = os.path.join(output_folder, f"{
      
      base_name}.pdf")
        
        # 根据文件类型选择不同的处理方式
        ...

4. 主程序逻辑(续)

main()函数中,我们根据文件的扩展名来决定如何处理每个文件。对于Word文档(.doc.docx),我们将首先将其转换为临时PDF文件,然后添加水印,并最终删除临时文件。对于图像文件(如.jpg, .jpeg, .png, .bmp, .tiff),直接将它们转换成PDF后添加水印。如果遇到不支持的文件类型,则打印出一条提示信息。

        if ext.lower() in ['.doc', '.docx']:
            # 创建一个临时PDF文件路径
            temp_pdf = os.path.join(output_folder, f"{
      
      base_name}_temp.pdf")
            # 将Word文档转换为临时PDF
            doc_to_pdf(file_path, temp_pdf)
            # 向临时PDF添加水印,并保存为最终输出
            add_watermark(temp_pdf, output_pdf, watermark_text)
            # 删除临时PDF文件
            os.remove(temp_pdf)
        elif ext.lower() in ['.jpg', '.jpeg', '.png', '.bmp', '.tiff']:
            # 直接将图片转换为PDF
            image_to_pdf(file_path, output_pdf)
            # 向生成的PDF添加水印,这里直接覆盖原文件
            add_watermark(output_pdf, output_pdf, watermark_text)
        else:
            # 对于其他不支持的文件类型给出提示
            print(f"Unsupported file type: {
      
      ext}")

运行程序

要运行此脚本,请确保已经正确安装了所有依赖库,并且设置好输入和输出文件夹的路径。此外,确保你有权限访问这些文件夹以及其中的文件。之后,在命令行中执行你的Python脚本即可开始处理指定文件夹内的文件。

python your_script_name.py

替换your_script_name.py为你保存上述代码的文件名。

总结

通过这个简单的Python脚本,我们可以自动化地完成从不同格式文件到PDF的转换过程,并给PDF文件添加自定义文本水印。这不仅提高了工作效率,还增强了内容的安全性和可追溯性。希望这篇文章能帮助你在日常工作中更高效地管理文档。如果你有任何问题或改进建议,欢迎留言讨论!

猜你喜欢

转载自blog.csdn.net/2301_78198846/article/details/143364174