python自动化办公——定制化将电子签名批量签写到PDF文件

这篇具有很好参考价值的文章主要介绍了python自动化办公——定制化将电子签名批量签写到PDF文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python自动化办公——定制化将电子签名批量签写到PDF文件

1、安装依赖

首先需要下载所需要的库

pip install pdf2image
pip install img2pdf
pip install opencv-python

此外还需要下载poppler,这里使用的是poppler-0.67.0

这是一个处理PDF文件的工具包,里面包含了非常多的功能供我们使用。

下载地址:https://blog.alivate.com.au/poppler-windows/

python自动化办公——定制化将电子签名批量签写到PDF文件

下载完压缩包之后,将压缩包解压到本地的某个地方,并记好路径。

2、需求分析

现需要将类似这种PDF文件,共10份或更多,批量插入电子签名

python自动化办公——定制化将电子签名批量签写到PDF文件

假设每个PDF文件的签名位置相同

python自动化办公——定制化将电子签名批量签写到PDF文件

写一个签名命名为tianhai.jpg

注:需将文件命名为英文,不然cv2的方法会读取不到文件

我们只需将需要签名的坐标找到,并插入图片即可。

3、代码

思路:

  1. 输入签字图片和PDF文件
  2. 将PDF文件转为图片格式
  3. 使用opencv对图片对签名和图片形式的文件进行处理
  4. 再将图片转换为PDF文件
  5. 输出PDF

导包

from pdf2image import convert_from_path
import img2pdf
import cv2
import os

使用pdf2image的convert_from_path方法,用于读取输入的PDF文件并将其转换为图片,注意将poppler-0.67.0\bin写入到参数里。

def pdf_to_image(inputPdf,outputJpg):
    images = convert_from_path(pdf_path=inputPdf,
                               dpi=400,
                               thread_count=4,
                               poppler_path='D:\\文件项目\\autoSign\\poppler-0.67.0\\bin')
    for index, img in enumerate(images):
        if index % 10 == 0:
            print('正在转换第%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)

定义将图片形式转换为PDF的函数

def jpg_to_pdf(inputfile,outputfile):
    with open('output/' + outputfile,'wb') as f:
        f.write(img2pdf.convert(inputfile))
    print('ok')

定义签名的函数,传入原始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)

最后循环传入所有PDF进行处理,并执行上述函数,输出结果。

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)

完整代码如下:

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:\\文件项目\\autoSign\\poppler-0.67.0\\bin')
    for index, img in enumerate(images):
        if index % 10 == 0:
            print('正在转换第%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)

结果如下:多少个PDF都可以写入
python自动化办公——定制化将电子签名批量签写到PDF文件文章来源地址https://www.toymoban.com/news/detail-489414.html

到了这里,关于python自动化办公——定制化将电子签名批量签写到PDF文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python实现办公自动化

    目录 一 python办公自动化所需类库 二 python操作excel文件 三 python自动发送邮件 四 python操作word文件 五 python操作PPT文件 一 python办公自动化所需类库 python操作excel、word、ppt所需库如下, 二 python操作excel文件 三 python自动发送邮件 四 python操作word文件 五 python操作PPT文件

    2024年02月05日
    浏览(50)
  • Python&Excel办公自动化

    操作工作簿 01 新建一个excel工作簿 02 批量新建多个工作簿 03 打开已有的工作簿 04 打开文件夹下的所有工作簿 05 重命名多个工作簿 06 批量修改工作簿格式 07 拆分一个工作簿变成多个新工作簿 08 将多个工作簿合并为一个工作簿 09 按照扩展名分类工作簿 10 按照日期分类工作簿

    2024年02月08日
    浏览(53)
  • python--自动化办公(Word)

    python自动化办公之—Word python-docx库

    2024年02月04日
    浏览(55)
  • Python办公自动化 – 操作NoSQL数据库和自动化图像识别

    以下是往期的文章目录,需要可以查看哦。 Python办公自动化 – Excel和Word的操作运用 Python办公自动化 – Python发送电子邮件和Outlook的集成 Python办公自动化 – 对PDF文档和PPT文档的处理 Python办公自动化 – 对Excel文档和数据库的操作运用、设置计划任务 Python办公自动化 – 对

    2024年02月02日
    浏览(58)
  • Python办公自动化 – 自动化文本翻译和Oracle数据库操作

    以下是往期的文章目录,需要可以查看哦。 Python办公自动化 – Excel和Word的操作运用 Python办公自动化 – Python发送电子邮件和Outlook的集成 Python办公自动化 – 对PDF文档和PPT文档的处理 Python办公自动化 – 对Excel文档和数据库的操作运用、设置计划任务 Python办公自动化 – 对

    2024年01月17日
    浏览(74)
  • python自动化办公--文件整理脚本详解

    今天讲解文件整理脚本的实现过程。这是一个很有用的技能,可以帮助你管理你的电脑上的各种文件。需求如下: 需求内容:给定一个打算整理的文件夹目录,这个脚本可以将该目录下的所有文件都揪出来,并且根据后缀名归类到不同的文件夹里。 python能力:使用python的内

    2024年02月10日
    浏览(68)
  • Python自动化办公之PDF拆分

    今天我们继续分享真实的自动化办公案例,希望各位 Python 爱好者能够从中得到些许启发,在自己的工作生活中更多的应用 Python,使得工作事半功倍! 需求 需要从 PDF 中取出几页并将其保存为新的 PDF,为了后期使用方便,这个工具需要做成傻瓜式的带有 GUI 页面的形式 选择

    2024年02月02日
    浏览(59)
  • Python 自动化办公:一键批量生成 PPT

    Stata and Python 数据分析 一、导读 在实际工作中,经常需要批量处理Office文件,比如需要制作一个几十页的PPT进行产品介绍时,一页一页地制作不仅麻烦而且格式可能不统一。那么有什么办法可以一键生成PPT呢?Python提供的pptx 包就可以用来自动化处理ppt。 pytho****n-pptx 是一个

    2024年01月17日
    浏览(76)
  • python办公自动化(6)——读取word文档

    因为我们要进行文件相关的操作,所以需要在一开始使用import导入Python内置的os模块。 我们需要先获取该文件夹下所有的答题卡列表,再使用for循环遍历文件夹中所有学生的答题卡,以便之后逐个读取信息。 完成了第一个步骤,接下来,我们就需要在for循环里,依次获取每位

    2023年04月08日
    浏览(61)
  • 当 Python 遇到 ChatGPT —— 自动化办公落地

    随着人工智能和自然语言处理技术的快速发展,聊天机器人成为了一个备受瞩目的领域。而在这个领域中,ChatGPT 无疑是最为出色的之一。作为一种基于深度学习的自然语言处理技术,ChatGPT 能够像人类一样进行对话交流,并为人们提供智慧和启示。而当 Python 遇到 ChatGPT,它

    2024年02月08日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包