工具exe下载链接,免安装:https://download.youkuaiyun.com/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()