骑缝章是在合同上经常看到的一种盖章方式,如下图所示。现在电子合同的应用已经越来越广泛,合同上如何实现骑缝章的效果 ,也是有必要研究一下的。本文几乎Python的方式,讲述了如果对印章图片进行处理,然后,实现给Pdf文件加上骑缝章的效果。

运行环境

  • Python3.0+

实现思路

实现思路如下:

#mermaid-svg-usW4rslHl3sJidcP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-usW4rslHl3sJidcP .error-icon{fill:#552222;}#mermaid-svg-usW4rslHl3sJidcP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-usW4rslHl3sJidcP .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-usW4rslHl3sJidcP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-usW4rslHl3sJidcP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-usW4rslHl3sJidcP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-usW4rslHl3sJidcP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-usW4rslHl3sJidcP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-usW4rslHl3sJidcP .marker.cross{stroke:#333333;}#mermaid-svg-usW4rslHl3sJidcP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-usW4rslHl3sJidcP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-usW4rslHl3sJidcP .cluster-label text{fill:#333;}#mermaid-svg-usW4rslHl3sJidcP .cluster-label span{color:#333;}#mermaid-svg-usW4rslHl3sJidcP .label text,#mermaid-svg-usW4rslHl3sJidcP span{fill:#333;color:#333;}#mermaid-svg-usW4rslHl3sJidcP .node rect,#mermaid-svg-usW4rslHl3sJidcP .node circle,#mermaid-svg-usW4rslHl3sJidcP .node ellipse,#mermaid-svg-usW4rslHl3sJidcP .node polygon,#mermaid-svg-usW4rslHl3sJidcP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-usW4rslHl3sJidcP .node .label{text-align:center;}#mermaid-svg-usW4rslHl3sJidcP .node.clickable{cursor:pointer;}#mermaid-svg-usW4rslHl3sJidcP .arrowheadPath{fill:#333333;}#mermaid-svg-usW4rslHl3sJidcP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-usW4rslHl3sJidcP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-usW4rslHl3sJidcP .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-usW4rslHl3sJidcP .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-usW4rslHl3sJidcP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-usW4rslHl3sJidcP .cluster text{fill:#333;}#mermaid-svg-usW4rslHl3sJidcP .cluster span{color:#333;}#mermaid-svg-usW4rslHl3sJidcP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-usW4rslHl3sJidcP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

印章PNG文件
印章图片分割
PDF合同文件
读取页数
创建空白同页数PDF文件
图片绘制PDF制定位置
临时PDF
融合
最终结果

一定要避免一个误区,尽量不要在word上操作,然后再转PDF。python实现Word转PDF基本都要依赖于windows上安装的Word程序,这就限制了只能在Windows上运行。

实现效果

注意,必须是A4纸大小的PDF文件

核心代码

图片分割

def xz(image_path, count):"""将图片水平分割:param image_path:PNG图片路径:param count: 页数:return:"""img_path = image_path# 判断是否有效if img_path != '':print(img_path)  # 图片路径# 分割成1行img_split_row = 1  # 行数# 分割成几列sp = count  # 输入拆分列数量img_split_col = int(sp)# 要保存的图片路径(保存为png图片格式)if os.path.dirname(img_path) == "":img_path = os.getcwd() + os.sep + img_pathimg_save = os.path.dirname(img_path) + os.sep + "images" + os.sepif not os.path.exists(img_save):os.makedirs(img_save)# 分割图片img_ext_name = os.path.splitext(os.path.basename(img_path))[1]img_now = imim.open(img_path)split_size_w = int(img_now.size[0] / img_split_col)split_size_h = int(img_now.size[1] / img_split_row)result_path = []for r in range(img_split_row):for c in range(img_split_col):split_area = (split_size_w * c, r * split_size_h, split_size_w * (c + 1), split_size_h * (r + 1))# print( (r*img_split_col+c+1) );img_now.crop(split_area).save(img_save + str(r * img_split_col + c + 1) + img_ext_name)result_path.append(img_save + str(r * img_split_col + c + 1) + img_ext_name)time.sleep(0.5)  # 等待# 结束print("图片分割结束,一共" + str(img_split_row * img_split_col) + "张图片(保存在" + img_save)return (result_path, split_size_w, split_size_h)

PDF合成

from PyPDF2 import PdfReader,PdfWriter
import osdef merge_pdf(water_pdf, target_pdf, result_path):"""两个pdf融合:param water_pdf: 水印PDF文件:param target_pdf: 合同PDF文件:param result_path: 结果输出录路径:return: """# 获取页数pages_count = get_num_pages(target_pdf)watermark_reader = PdfReader(target_pdf)# 读取需要被添加水印的PDFreader = PdfReader(water_pdf)writer = PdfWriter()# 遍历所有页面for page_index in range(0, pages_count):# 合并水印页面page = watermark_reader.pages[page_index]page.merge_page(reader.pages[page_index])writer.add_page(page)with open(result_path, "wb") as f:writer.write(f)

源代码下载

如果还有疑问,可以前往下载源代码https://download.csdn.net/download/GISuuser/87387763

python实现给pdf文件加骑缝章效果相关推荐

  1. python:实现pdf文件加盖骑缝章

    添加骑缝章的方式: 1.代码实现 2.PS实现 下面介绍用python进行自动化实现的方法. 一.加载模块: import time from pathlib import Path import o ...

  2. Java给PDF文件生成骑缝章

    什么是缝骑章? 骑缝章(Paging seal.)是海关常用词汇.为了保证海关监管货物留存单据的完整齐全以及核对有关单证,在单据交接处所加盖的印章. 在两张纸交接处的印章.这种印章多盖在条据.证书或其 ...

  3. Java 中pdf部分内容加边线_Java 在PDF中添加骑缝章示例解析

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java ...

  4. 骑缝章 Java_Java 在PDF中添加骑缝章示例解析

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java ...

  5. Java实现pdf加盖骑缝章_Java 在PDF中添加骑缝章示例解析

    骑缝章是用于往来业务合同,以确保合同真实.有效的印章加盖方法,是一种防范风险的重要方式.在Java程序中,可以通过使用工具来辅助加盖这种骑缝章. 工具:Free Spire.PDF for Java ...

  6. Java实现给PDF文件加文字水印和图片水印(可以自定义水印格式)

    使用Java代码给PDF文件加文字水印 直接上代码运行即可 依赖 有的可能用不上我直接复制全部了 <dependencies><!--word文件转PDF以及水印-->< ...

  7. 第19天---python办公自动化---操作PDF文件

    第19天-python办公自动化-操作PDF文件 在Python中,可以使用名为PyPDF2的三方库来读取PDF文件,可以使用下面的命令来安装它. pip install PyPDF2 读取PDF并抽 ...

  8. 【Python】用于在 Python 中处理 PDF 文件的 PyPDF2 库

    作者 | megha152 编译 | Flin 来源 | analyticsvidhya 介绍 PDF 代表便携式文档格式.它使用 .pdf 扩展名.这种类型的文件主要用于共享目的.它们不能被修改,从 ...

  9. python PyPDF2处理PDF文件

    python PyPDF2处理PDF文件 安装PyPDF2 pip install PyPDF2 官方文档: https://pypdf2.readthedocs.io/en/latest/ 导入模块 ...

最新文章

  1. ORA-10873解决办法
  2. 漏答题、偏科、多次复读,30 位互联网大佬考上啥大学了?
  3. hdu5248序列变换(二分+贪心)基础题
  4. android viewpager嵌套侧滑删除listview冲突问题
  5. 7月的夏日北京必联网公司一行(图文)
  6. eclipse快捷键、智能提示
  7. 简单的故事品味生活,
  8. ubunt18.04LTS+vscode+anaconda3下的python+C++调试
  9. vue状态管理存取数据_Vue中的数据通信和状态管理
  10. atitit.MyEclipse10 中增加svn插件故障排除
  11. linux ext4分区无损扩容,linux操作系统无损升级文件系统ext3至ext4--数据盘篇
  12. 对LFW数据库的翻译【1】
  13. 第一次在CSDN上写博客
  14. 机械传动机构思维导图
  15. ClickHouse安装部署
  16. 这六大方法,如何让 Transformer 轻松应对高难度长文本序列?
  17. PLC程序限制触摸屏输入值跨度过大
  18. Delphi7微信、支付宝扫码支付源码
  19. SAP物料主数据视图维护状态及标识关系表
  20. Docker实现原理之 - OverlayFS实现原理

热门文章

  1. 基于Matlab的MIMO通信系统仿真
  2. ERP主要功能模块简介- -
  3. k8s 容器编排(高级版)
  4. 子墨对酒《三国杀》里论模式(肆)单例模式
  5. 54.查表法按日期生成流水号的案例
  6. 图片和图形之硬件加速(7)
  7. 基于WPF的开发的知识点
  8. android之系统相机拍照
  9. c语言 malloc 函数用法
  10. 仓库管理软件改善库存管理水平不小!