源代码:
https://github.com/julis-wolala/PDFaddSign
问题描述:
批量给PDF添加签名(水印,图片),然后用同样的名字保存
原理:
先用word新建大小一样的空白文档,把签名图片放进你想要的位置,另存为sign.PDF
利用PyPDF2里面的PDF合成方法,把原PDF与你的sign.PDF合成保存,以达到添加签名的效果。
#将PDF文件夹里的所有pdf添加签名图片
import os
import PyPDF2
#读取签名pdf内容
SignPDF = PyPDF2.PdfFileReader(r".\signPDF\Sign.pdf")
sourcepath=r".\outputPDF"
outputpath = r".\outputPDF"
#定义一个合成原PDF与签名PDF的方法
def add_sign(Sign_pdf,page_pdf):
"""
将水印pdf与pdf的一页进行合并
:param Sign_pdf:
:param page_pdf:
:return:
"""
page_pdf.mergePage(Sign_pdf.getPage(0))
return page_pdf
#遍历文件夹里的所有文件,然后添加图片签名
for root, dirs, files in os.walk(r".\sourcePDF", topdown=False):
for name in files:
address = os.path.join(root, name)
print(address)
pdfReader = PyPDF2.PdfFileReader(address)
# 遍历pdf的每一页,添加水印,该功能尚未实现
for page in range(pdfReader.numPages):
page_pdf = add_sign(SignPDF, pdfReader.getPage(page))
pdfWriter = PyPDF2.PdfFileWriter()
pdfWriter.addPage(page_pdf)
#获取文件名
filename=os.path.basename(address)
print(filename)
#生成输出路径
completePosition=os.path.join(outputpath,filename)
#把结果保存到新文件夹里
with open(completePosition, 'wb') as target_file:
pdfWriter.write(target_file)
如果程序执行报错需要改一下Poweshell的执行策略,terminal执行即可
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
待解决的问题:
- 新保存的文档很大,不知道为什么
- 该代码需要手动改路径
- 该方案插入的签名图片质量会被降低