python3 PDF分割工具 附代码和exe免安装文件

工具exe下载链接,免安装https://download.csdn.net/download/chl183/33191529

代码如下:

from appJar import gui
from PyPDF2 import PdfFileWriter, PdfFileReader
from pathlib import Path


def validate_inputs(input_file, output_dir, range, file_name):
    errors = False
    error_msgs = []

    # Make sure a PDF is selected
    if Path(input_file).suffix.upper() != ".PDF":
        errors = True
        error_msgs.append("请选择一个PDF输入文件")

    # Make sure a range is selected
    if len(range) < 1:
        errors = True
        error_msgs.append("请输入有效的页面范围")

    # Check for a valid directory
    if not (Path(output_dir)).exists():
        errors = True
        error_msgs.append("请选择一个有效的输出目录")

    # Check for a file name
    if len(file_name) < 1:
        errors = True
        error_msgs.append("请输入文件名")

    return (errors, error_msgs)


def split_pages(input_file, page_range, out_file):
    output = PdfFileWriter()
    input_pdf = PdfFileReader(open(input_file, "rb"))
    output_file = open(out_file, "wb")
    inpages = input_pdf.getNumPages()
    page_ranges = [x.split("-") for x in page_range.split(",")]
    # print(page_ranges)
    range_list = []
    while ['偶数页'] in page_ranges:
        range_list = [i for i in range(2, inpages + 1, 2)]
        page_ranges.remove(['偶数页'])
    while ['奇数页'] in page_ranges:
        range_list += [i for i in range(1, inpages + 1, 2)]
        page_ranges.remove(['奇数页'])
    try:
        range_list += [i for r in page_ranges for i in range(int(r[0]), int(r[-1]) + 1)]
    except:
        app.infoBox("信息", "范围输入错误。\n文件仍将被保存。\n(输出文件损坏)")
    range_list = list(set(range_list))
    range_list.sort()
    # print(range_list)

    for p in range_list:
        # Need to subtract 1 because pages are 0 indexed
        try:
            output.addPage(input_pdf.getPage(p - 1))
        except IndexError:
            # Alert the user and stop adding pages
            app.infoBox("信息", "范围超出输入中的页数。\n文件仍将被保存。")
            break
    output.write(output_file)

    if (app.questionBox("文件保存", "输出PDF已保存。你想退出吗?")):
        app.stop()


def press(button):
    if button == "开始":
        src_file = app.getEntry("输入文件")
        dest_dir = app.getEntry("输出位置")
        page_range = app.getEntry("页数范围")
        out_file = app.getEntry("输出名称")
        if out_file[-4:].upper() != ".PDF":
            out_file = out_file + ".pdf"
        errors, error_msg = validate_inputs(src_file, dest_dir, page_range, out_file)
        if errors:
            app.errorBox("错误", "\n".join(error_msg), parent=None)
        else:
            split_pages(src_file, page_range, Path(dest_dir, out_file))
    else:
        app.stop()


app = gui("PDF分割小工具", useTtk=True)
app.setTtkTheme("default")
app.setSize(500, 200)

app.addLabel("选择源PDF文件")
app.addFileEntry("输入文件")

app.addLabel("选择输出位置")
app.addDirectoryEntry("输出位置")

app.addLabel("输出文件名称")
app.addEntry("输出名称")

app.addLabel("页数范围: 1,3,4-10,奇数页,偶数页")
app.addEntry("页数范围")

app.addButtons(["开始", "退出"], press)

app.go()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值