python自動化辦公——定制化將電子簽名批量簽寫到PDF文件
1、安裝依賴
首先需要下載所需要的庫
pip install pdf2image
pip install img2pdf
pip install opencv-python
此外還需要下載poppler,這里使用的是poppler-0.67.0
這是一個(gè)處理PDF文件的工具包,里面包含了非常多的功能供我們使用。
下載地址:https://blog.alivate.com.au/poppler-windows/
下載完壓縮包之后,將壓縮包解壓到本地的某個(gè)地方,并記好路徑。
2、需求分析
現(xiàn)需要將類似這種PDF文件,共10份或更多,批量插入電子簽名
假設(shè)每個(gè)PDF文件的簽名位置相同
寫一個(gè)簽名命名為tianhai.jpg
注:需將文件命名為英文,不然cv2的方法會讀取不到文件
我們只需將需要簽名的坐標(biāo)找到,并插入圖片即可。
3、代碼
思路:
- 輸入簽字圖片和PDF文件
- 將PDF文件轉(zhuǎn)為圖片格式
- 使用opencv對圖片對簽名和圖片形式的文件進(jìn)行處理
- 再將圖片轉(zhuǎn)換為PDF文件
- 輸出PDF
導(dǎo)包
from pdf2image import convert_from_path
import img2pdf
import cv2
import os
使用pdf2image的convert_from_path方法,用于讀取輸入的PDF文件并將其轉(zhuǎn)換為圖片,注意將poppler-0.67.0\bin寫入到參數(shù)里。
def pdf_to_image(inputPdf,outputJpg):
images = convert_from_path(pdf_path=inputPdf,
dpi=400,
thread_count=4,
poppler_path='D:\\文件項(xiàng)目\\autoSign\\poppler-0.67.0\\bin')
for index, img in enumerate(images):
if index % 10 == 0:
print('正在轉(zhuǎn)換第%s頁...' % (index))
img.save(outputJpg + '_%s.jpg' % (index))
定義處理簽名圖片的函數(shù)
def signatureJpg(inputJpg,sigJpg,outputJpg):
oriData = cv2.imread(inputJpg,0)
sigData = cv2.imread(sigJpg,0)
print(oriData.shape)
oriRow = int(oriData.shape[0]*11.5//17)
oriCol = int(oriData.shape[1]*5//12)
print(oriCol,oriRow)
# cv2.imshow('this',oriData)
for i in range(sigData.shape[0]):
for j in range(sigData.shape[1]):
if sigData[i][j] < 100:
oriData[oriRow+i][oriCol+j] = sigData[i][j]
cv2.imwrite(outputJpg,oriData)
定義將圖片形式轉(zhuǎn)換為PDF的函數(shù)
def jpg_to_pdf(inputfile,outputfile):
with open('output/' + outputfile,'wb') as f:
f.write(img2pdf.convert(inputfile))
print('ok')
定義簽名的函數(shù),傳入原始PDF、電子簽名,輸出pdf
def signaturePdf(inputPdf,sigJpg,outputPdf):
outputJpg = 'pdf2img'
pdf_to_image(inputPdf,outputJpg)
signatureJpg(outputJpg + '_0.jpg', sigJpg, outputJpg + '.jpg')
jpg_to_pdf(outputJpg + '.jpg',outputPdf)
最后循環(huán)傳入所有PDF進(jìn)行處理,并執(zhí)行上述函數(shù),輸出結(jié)果。
for i, j, k in os.walk('input/'):
print(i,j,k)
for item in k:
inputPdf = i + item
sigJpg = 'tianhai.jpg'
outputPdf = item
signaturePdf(inputPdf,sigJpg,outputPdf)
完整代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-489414.html
from pdf2image import convert_from_path
import img2pdf
import cv2
import os
def pdf_to_image(inputPdf,outputJpg):
images = convert_from_path(pdf_path=inputPdf,
dpi=400,
thread_count=4,
poppler_path='D:\\文件項(xiàng)目\\autoSign\\poppler-0.67.0\\bin')
for index, img in enumerate(images):
if index % 10 == 0:
print('正在轉(zhuǎn)換第%s頁...' % (index))
img.save(outputJpg + '_%s.jpg' % (index))
def signatureJpg(inputJpg,sigJpg,outputJpg):
oriData = cv2.imread(inputJpg,0)
sigData = cv2.imread(sigJpg,0)
print(oriData.shape)
oriRow = int(oriData.shape[0]*11.5//17)
oriCol = int(oriData.shape[1]*5//12)
print(oriCol,oriRow)
# cv2.imshow('this',oriData)
for i in range(sigData.shape[0]):
for j in range(sigData.shape[1]):
if sigData[i][j] < 100:
oriData[oriRow+i][oriCol+j] = sigData[i][j]
cv2.imwrite(outputJpg,oriData)
def jpg_to_pdf(inputfile,outputfile):
with open('output/' + outputfile,'wb') as f:
f.write(img2pdf.convert(inputfile))
print('ok')
def signaturePdf(inputPdf,sigJpg,outputPdf):
outputJpg = 'pdf2img'
pdf_to_image(inputPdf,outputJpg)
signatureJpg(outputJpg + '_0.jpg', sigJpg, outputJpg + '.jpg')
jpg_to_pdf(outputJpg + '.jpg',outputPdf)
for i, j, k in os.walk('input/'):
print(i,j,k)
for item in k:
inputPdf = i + item
sigJpg = 'qianming.jpg'
outputPdf = item
signaturePdf(inputPdf,sigJpg,outputPdf)
結(jié)果如下:多少個(gè)PDF都可以寫入文章來源地址http://www.zghlxwxcb.cn/news/detail-489414.html
到了這里,關(guān)于python自動化辦公——定制化將電子簽名批量簽寫到PDF文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!