当前位置: 首页 > news >正文

python实现给pdf文件加骑缝章效果

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

运行环境

  • Python3.0+

实现思路

实现思路如下:

印章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_path
        img_save = os.path.dirname(img_path) + os.sep + "images" + os.sep
        if 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 os


def 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)
    # 读取需要被添加水印的PDF
    reader = 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

相关文章:

  • 百度云虚拟主机搭建wordpress/互联网推广方案
  • 网站建设 ppt/seo软件服务
  • 公司官网源码下载/重庆seo标准
  • 山东省住房和城乡建设厅官方网站/潍坊住房公积金管理中心
  • 网站数据库是干什么的/青岛网站设计制作
  • 网站降权恢复/百度怎样发布信息
  • mac 版本 —— nvm-node版本控制
  • 你是真的“C”——函数递归详解汉诺塔+青蛙跳台阶
  • 一个注解(优雅)搞定SpringBoot项目中的身份证号、手机号等敏感数据脱敏
  • 【每日一题Day89】LC1813句子相似性 III | 双指针
  • 学习记录661@项目管理之项目立项管理
  • 手工测试 | 黑盒测试方法论—边界值
  • 【云原生】k8s安全机制
  • LeetCode刷题模版:111 - 120
  • 从头安装gdal库(Linux环境下的Python版)
  • 【sklearn】GradientBoosting(GBDT)
  • 【C++】Hash闭散列
  • 字符读写文件流