python实现给pdf文件加骑缝章效果
骑缝章是在合同上经常看到的一种盖章方式,如下图所示。现在电子合同的应用已经越来越广泛,合同上如何实现骑缝章的效果 ,也是有必要研究一下的。本文几乎Python的方式,讲述了如果对印章图片进行处理,然后,实现给Pdf文件加上骑缝章的效果。
运行环境
- Python3.0+
实现思路
实现思路如下:
一定要避免一个误区,尽量不要在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