最近有小伙伴有这样的需求,即业务端传过来的pdf一张是有三张发票得内容,并且等比由虚线分隔开,类似这样

现在需要把每一张发票单独分割出来,然后做后续操作,这时候就不免会想到“分割pdf”这个指令

但是发现分割模式暂时没有以单独pdf页数去分割的内容。因此这时候不得部另辟蹊径
大家可以新建python模块直接复制粘贴,然后导入
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块
import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
import fitz
def split_pdf_to_three(input_pdf, output_pdf_prefix):
# 打开 PDF 文件
pdf_document = fitz.open(input_pdf)
total_pages = pdf_document.page_count
for page_num in range(total_pages):
page = pdf_document.load_page(page_num)
rect = page.rect
# 计算三等分的高度,如果是别的N等分,直接修改后面得被除数即可
height_third = rect.height / 3
# 创建新的 PDF 文档
new_pdf_document = fitz.open()
# 切割成三份并保存到新的 PDF 文档
for part in range(3):
new_page = new_pdf_document.new_page(width=rect.width, height=height_third)
clip_rect = fitz.Rect(0, part * height_third, rect.width, (part + 1) * height_third)
new_page.show_pdf_page(new_page.rect, pdf_document, page_num, clip=clip_rect)
# 保存新的 PDF 文档
output_pdf = f"{output_pdf_prefix}_page{page_num + 1}_part{part + 1}.pdf"
new_pdf_document.save(output_pdf)
new_pdf_document.close()
pdf_document.close()
# 使用示例
def main(args):
input_pdf_path = 'C:\\Users\\64636\\Desktop\\发票\\01.pdf'
output_pdf_prefix = 'C:\\Users\\64636\\Desktop\\发票\\output.pdf'
split_pdf_to_three(input_pdf_path, output_pdf_prefix)
pass
