【工具】使用Python向PDF文档中签名

经常需要向PDF文档签名,online版本多数都开始收费了,并且用鼠标画签名效果很难看。最后索性用Python开发了一个工具,拍下签名照片就可以放到PDF文档某页某个地方。开始熟悉这个仓库可能需要一定时间,但熟悉之后使用起来就非常方便了。一张签名照片,签遍PDF文档。

仓库网址:https://github.com/MengWoods/sign-pdf-with-transparent-background-signature

工作原理

大致的思路原理:

  1. 用CV二值化签名照片,提取深色的签名。
  2. 用PDF相关的库把输入文档拆分成单个页。
  3. 用CV读取需要签名的页码,在指定图片位置将签名与该PDF页重合merge。
  4. 用PDF库将所有的单页文档组合成完整的PDF文件。
  5. 清理过程中产生的中间文件。

快速上手

  1. 克隆仓库后, 安装必要的依赖库: pip install -r requirements.txt
  2. 给样例文档签名, 运行: python main.py -t signature -i example-pdf.pdf -s example-signature.jpg -c 0.2 -n 2 -o 0.65,0.72
  3. 可以在.files文件夹下查看签名后的文档效果.

下面是仓库原有Readme:

介绍

该工具接受PDF文件和签名图片作为输入,并输出已签名的PDF文件。

示例结果:
在这里插入图片描述

在上面的图片中,您可以看到输入照片和输出结果的示例,完整的签名PDF文件可以在仓库路径files/example-pdf_signed.pdf中找到。

多数在线签名网站或工具是收费或限制使用次数的。该项目允许您无限制地使用。经过本人测试,该工具运行良好,可以取代许多在线签名网站。如果在使用中发现任何问题,请提交问题,如果您喜欢它或认为它有帮助,请考虑为该项目点赞。感谢您的贡献。

使用

在Python 3.X环境中,使用pip install -r requirements.txt安装依赖项。

将输入文件放到./files文件夹中,然后使用python main.py -h命令来检查参数的含义。以下是签署PDF的基本参数:

'-b','--base-path',default='./files',type=str,help='要处理的PDF文件的基本路径'
'-t','--type-of-manipulation',required=True,type=str,
choices=['ocr','merge','split','watermark','signature'],
help="PDF操作的类型"
'-i','--input-files',required=True,nargs='+',help="输入PDF文件名,两个文件之间加一个空格"
'-s','--signature-file',type=str,help="签名图片文件名"
'-n','--signature-page-num',type=int,default=1,help="PDF文件的签名页码[1,+Inf)"
'-o','--signature-offset-xy',type=parse_two_numbers,default=[0,0],help="签名的x和y坐标的偏移比例。范围是[0,1]"
'-c','--signature-scale',type=float,default=1,help="缩放输入签名文件的比例(0,+inf),如果需要旋转签名,请将其设置为负值"
'-g','--gray-threshold',type=float,default=100,help="处理签名图像的灰度阈值[0,255]"

签名

  • 拍摄一个个人签名照片,例如示例图片。
  • 将签名照片和PDF文件放到./files文件夹中。
  • 选择签名页码(-n)、灰度阈值(-g)、缩放(-c)和偏移比例(-o),后两个参数可能需要尝试几次以获得最佳结果。
    • 页码从1开始。
    • 灰度阈值的范围是[0,255],用于从照片中提取签名,对于大多数情况来说,默认值应该足够。如果不行,请进行调整并检查结果。
    • 缩放的范围是[0,+inf),通常需要缩小签名的大小,例如0.3。将其设置为负值将旋转签名。
    • 偏移比例按X,Y顺序排列,PDF页面的左上角是原点,Y是水平的,X是垂直的。范围是[0,1]。参见下图作为参考。
      在这里插入图片描述
  • 使用以上所述内容,运行程序进行签署。下面是使用此命令签署示例PDF的示例:
    python main.py -t signature -i example-pdf.pdf -s example-signature.jpg -c 0.2 -n 2 -o 0.65,0.72

其他

以下是一些其他用法示例,假设您的输入文件位于./files文件夹中:

  • OCR pdf并保存为txt文件 python main.py -t ocr -i a.pdf
  • 将多个PDF合并为一个PDF文件 python main.py -t merge -i a.pdf b.pdf
  • 将一个PDF拆分成多个PDF文件 python main.py -t split -i a.pdf
  • 将水印添加到PDF文件的所有页面 python main.py -t watermark -i a.pdf -w watermark.pdf;仅将水印添加到第一页(或最后一页) python main.py -t watermakr -i a.pdf -w watermark.pdf -p first
  • 欢迎测试并反馈,谢谢。
  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MengWoods

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值