前言
在日常工作中,我们经常需要将不同格式的文档转换为PDF,并给这些PDF添加水印以保护内容或标注来源。本文将介绍如何使用Python来实现这一功能,包括从Word文档到PDF的转换、图片转PDF以及向PDF文件添加文本水印。我们将使用PyMuPDF
(也称为fitz
)、pdf2image
、img2pdf
和comtypes
等库。
准备工作
首先确保安装了以下所需的Python库:
PyMuPDF
或fitz
:用于操作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文件添加自定义文本水印。这不仅提高了工作效率,还增强了内容的安全性和可追溯性。希望这篇文章能帮助你在日常工作中更高效地管理文档。如果你有任何问题或改进建议,欢迎留言讨论!