i( ̄︶ ̄)↗ 一张pdf如何等比分割成多个pdf
评论
收藏

i( ̄︶ ̄)↗ 一张pdf如何等比分割成多个pdf

经验分享
凌霄
2024-06-17 15:26·浏览量:666
凌霄
发布于 2024-06-17 15:26666浏览

背景

最近有小伙伴有这样的需求,即业务端传过来的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

效果

收藏3
全部评论1
最新
发布评论
评论