如何给pdf文件批量添加水印,python批量打印pdf文件
本文将通过设置批量PDF文件的路径和要添加的水印名称来实现批量添加PDF水印的效果。感兴趣的朋友可以和边肖一起尝试一下。
00-1010前言实施步骤完整代码
目录
通过设置批量PDF文件的路径和要添加的水印名称,可以实现批量添加PDF水印的效果。
实现思路如下:在批量PDF文件的路径下生成一个带水印的PDF模板。最后,将批处理文件的每个PDF页面和水印模板进行合并,完成批处理水印的效果。
需要注意的是,批量PDF文件必须与PDF模板水印文件的大小一致,可以在代码中进行调整。
前言
首先,准备好要加水印的PDF文件,放在一个文件夹下。
在代码中设置PDF批处理文件的路径和水印名称。
if__name__==__main__:
主( C:/pdf ,我是水印)
内部实现过程封装在main()函数中。在这里,只需更改水印的名称和批量PDF文件的路径并直接执行即可。
启动后,以下结果显示执行已经完成。
为了不覆盖原来的PDF文件,合并后的文件都是加了‘合并’二字的PDF文件。
说完如何操作,再来看看主要的代码块。
使用的第三方库包括以下,我在其中写了相关的注释。
Importos#应用文件操作
# reportlab是Python的标准库,可以画图、画表、编辑文本,最后以PDF格式输出。
fromreportlab . pdfgenimportcanvas
fromreportlab . lib . unitsimportcm
fromreportlab . pdfbaseimportpdfmetrics
from reportlab . pdf base . ttfontsimportttfont
Pdf度量标准。registerfont (ttfont (songti , c :/windows/fonts/simsun . TTC )#加载宋体
# PyPDF2模块的主要功能是拆分或合并PDF文件,裁剪或转换PDF文件中的页面。
fromPyPDF2importPdfFileWriter,PdfFileReader
导入日志#日志打印库
模块的初始化也比较简单,之前的文章已经有相关调用。
#初始化日志设置
Logger=logging.getLogger(批量水印)
logging . basic config(format= %(asctime)s %(level name)-8s :%(message)s )
logger.setLevel(日志记录。调试)
日志初始化后,在需要打印日志的地方调用就可以了。
实现过程主要有三个功能,一是生成水印模板,二是将水印模板与批量PDF文件合并实现添加水印的功能,三是逐个遍历批量PDF文件实现水印逐个合并。
模板生成功能。
defgenerate_water_pdf(内容):
生成带水印的PDF
:paramcontent:水印名称
:返回:
罐头=帆布。画布( water_back.pdf ,pagesize=(21*cm,29.7*cm))
cans.translate(10*cm,
2 * cm) #移动原点坐标
Cans.setFont(宋体,23)#设置字体为宋体,大小为23号。
cans . setfillcolorgb(0.5,0.5,
0.5)#设置字体背景色
Cans.rotate(45)#设置字体倾斜
斜45度
cans.drawString(-7 * cm, 0 * cm, content)
cans.drawString(7 * cm, 0 * cm, content)
cans.drawString(0 * cm, 7 * cm, content)
cans.drawString(0 * cm, -7 * cm, content)
cans.save() # 保存水印的PDF文件
水印合成实现函数。
def insert_water_to_pdf(input_pdf, output_pdf, water_pdf):合并水印到PDF文件中
:param input_pdf: 输入文件路径
:param output_pdf: 输出文件路径
:param water_pdf: 水印文件路径
:return:
water = PdfFileReader(water_pdf) # 读取水印PDF
water_page = water.getPage(0) # 获取水印PDF的第一页
pdf = PdfFileReader(input_pdf, strict=False) # 读取需要添加水印的文件
pdf_writer = PdfFileWriter() # 创建PDF文件写入对象
for page in range(pdf.getNumPages()): # 遍历每一页PDF对象
pdf_page = pdf.getPage(page) # 获取PDF的当前页对象
pdf_page.mergePage(water_page) # 将水印页合并到当前页中
pdf_writer.addPage(pdf_page) # 将合并后的PDF对象页添加到PDF写入对象中
output_file = open(output_pdf, wb) # 打开PDF输出文件
pdf_writer.write(output_file) # 将文件写入到输出文件
output_file.close() # 关闭写入流
批量PDF文件遍历调用合成函数。
def main(diretory, current):if os.path.isdir(diretory):
logger.info(文件夹[ + diretory + ]校验成功!)
os.chdir(diretory)
logger.info(当前路径为[ + os.getcwd() + ])
generate_water_pdf(current)
logger.info(水印PDF文件生成成功!)
for file_path, dir_names, file_names in os.walk(r + os.getcwd()):
for file_name in file_names:
try:
name = file_name.split(.)[0]
if name == water_back:
continue
else:
file_name_path = os.path.join(file_path, file_name)
output_file_path = file_name_path.split(.)[0] + _已添加水印.pdf
insert_water_to_pdf(file_name_path, output_file_path, water_back.pdf)
logger.info([ + file_name_path + ]完成水印合并!)
except Exception as e:
logger.error([ + file_name_path + ]发生异常,执行下一个!)
logger.error(异常信息: + repr(e))
else:
logger.info(文件夹[ + diretory + ]校验失败!)
主要实现过程就是通过上面三个函数来完成的,最后调用后台入口函数将mian()函数调用执行就可以了。
完整代码
# -*- coding:utf-8 -*-# @author Python 集中营
# @date 2022/1/27
# @file test4.py
# done
# 批量向PDF文件添加中文水印
import os # 应用文件操作
# reportlab是Python的一个标准库,可以画图、画表格、编辑文字,最后可以输出PDF格式。
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
pdfmetrics.registerFont(TTFont(songti, C:/Windows/Fonts/simsun.ttc)) # 加载宋体
# PyPDF2模块主要的功能是分割或合并PDF文件,裁剪或转换PDF文件中的页面。
from PyPDF2 import PdfFileWriter, PdfFileReader
import logging # 日志打印库
# 初始化日志设置
logger = logging.getLogger(批量添加水印)
logging.basicConfig(format=%(asctime)s %(levelname)-8s: %(message)s)
logger.setLevel(logging.DEBUG)
def generate_water_pdf(content):
生成带有水印的PDF
:param content: 水印名称
:return:
cans = canvas.Canvas(water_back.pdf, pagesize=(21 * cm, 29.7 * cm))
cans.translate(10 * cm,
12 * cm) # 移动原点坐标
cans.setFont(songti, 23) # 设置字体为宋体、大小为23号
cans.setFillColorRGB(0.5, 0.5,
0.5) # 设置字体背景颜色
cans.rotate(45) # 设置字体倾斜45度
cans.drawString(-7 * cm, 0 * cm, content)
cans.drawString(7 * cm, 0 * cm, content)
cans.drawString(0 * cm, 7 * cm, content)
cans.drawString(0 * cm, -7 * cm, content)
cans.save() # 保存水印的PDF文件
def insert_water_to_pdf(input_pdf, output_pdf, water_pdf):
合并水印到PDF文件中
:param input_pdf: 输入文件路径
:param output_pdf: 输出文件路径
:param water_pdf: 水印文件路径
:return:
water = PdfFileReader(water_pdf) # 读取水印PDF
water_page = water.getPage(0) # 获取水印PDF的第一页
pdf = PdfFileReader(input_pdf, strict=False) # 读取需要添加水印的文件
pdf_writer = PdfFileWriter() # 创建PDF文件写入对象
for page in range(pdf.getNumPages()): # 遍历每一页PDF对象
pdf_page = pdf.getPage(page) # 获取PDF的当前页对象
pdf_page.mergePage(water_page) # 将水印页合并到当前页中
pdf_writer.addPage(pdf_page) # 将合并后的PDF对象页添加到PDF写入对象中
output_file = open(output_pdf, wb) # 打开PDF输出文件
pdf_writer.write(output_file) # 将文件写入到输出文件
output_file.close() # 关闭写入流
def main(diretory, current):
if os.path.isdir(diretory):
logger.info(文件夹[ + diretory + ]校验成功!)
os.chdir(diretory)
logger.info(当前路径为[ + os.getcwd() + ])
generate_water_pdf(current)
logger.info(水印PDF文件生成成功!)
for file_path, dir_names, file_names in os.walk(r + os.getcwd()):
for file_name in file_names:
try:
name = file_name.split(.)[0]
if name == water_back:
continue
else:
file_name_path = os.path.join(file_path, file_name)
output_file_path = file_name_path.split(.)[0] + _已添加水印.pdf
insert_water_to_pdf(file_name_path, output_file_path, water_back.pdf)
logger.info([ + file_name_path + ]完成水印合并!)
except Exception as e:
logger.error([ + file_name_path + ]发生异常,执行下一个!)
logger.error(异常信息: + repr(e))
else:
logger.info(文件夹[ + diretory + ]校验失败!)
if __name__ == __main__:
main(C:/pdf, 我是一个水印)
到此这篇关于Python实现批量向PDF文件添加中文水印的文章就介绍到这了,更多相关Python PDF添加水印内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。