鱼C论坛

 找回密码
 立即注册
查看: 3753|回复: 2

[技术交流] 用Python写了一个PDF合并的小工具

[复制链接]
发表于 2022-1-18 09:37:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. # -*- coding: utf-8 -*-
  2. # @Time : 2021-12-6 9:10
  3. # @Author : Administrator
  4. # @Email : lcmmljs@foxmail.com
  5. # @File : main.py
  6. # @Project : Project

  7. import glob
  8. import PySimpleGUI as sg
  9. from PyPDF2 import PdfFileReader, PdfFileWriter

  10. # 创建GUI布局
  11. fra1 = sg.Frame('打开文件夹', [[sg.InputText(key='-IN-'), sg.FolderBrowse('文件位置')], [sg.Button('确认')]])
  12. fra2 = sg.Frame('文件列表', [[sg.Listbox(values=[''], s=(54, 30), key='-LIST-')],
  13.                          [sg.Button('上移'), sg.Button('下移'), sg.Button('合并')]])

  14. col = sg.Column([[fra1], [fra2]], pad=(0, 0))

  15. layout = [[col]]
  16. window = sg.Window('合并PDF', layout, keep_on_top=True)

  17. # 创建程序主循环
  18. while True:
  19.     event, value = window.read()
  20.     if event is None:
  21.         break
  22.     elif event == '确认':
  23.         if value['-IN-'] != '':
  24.             path = window['-IN-'].get() + '/*.pdf'
  25.             file = glob.glob(path)
  26.             if file:
  27.                 window['-LIST-'].update(file)
  28.             else:
  29.                 sg.popup_ok('文件夹内未识别到PDF文件~', title='错误', keep_on_top=True)
  30.         else:
  31.             sg.popup_ok('请选择文件夹~', title='错误', keep_on_top=True)
  32.     elif event == '上移':
  33.         if value['-LIST-']:
  34.             choice = value['-LIST-']
  35.             index = file.index(choice[0])
  36.             file[index], file[index-1] = file[index-1], file[index]
  37.             window['-LIST-'].update(file)
  38.     elif event == '下移':
  39.         if value['-LIST-']:
  40.             choice = value['-LIST-']
  41.             index = file.index(choice[0])
  42.             file[index], file[index+1] = file[index+1], file[index]
  43.             window['-LIST-'].update(file)
  44.     elif event == '合并':
  45.         if file:
  46.             pdfFileWriter = PdfFileWriter()
  47.             for pdf in file:
  48.                 pdfReader = PdfFileReader(open(pdf, 'rb'))
  49.                 numPages = pdfReader.getNumPages()
  50.                 for i in range(0, numPages):
  51.                     pageObj = pdfReader.getPage(i)
  52.                     pdfFileWriter.addPage(pageObj)
  53.             folder = sg.popup_get_folder('请选择文件保存位置:', title='提示', keep_on_top=True)
  54.             pdfFileWriter.write(open(folder + '//合并文件.pdf', 'wb'))
  55. window.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-18 11:19:52 | 显示全部楼层
稍微更新一下~
  1. # -*- coding: utf-8 -*-
  2. # @Time : 2021-12-6 9:10
  3. # @Author : Administrator
  4. # @Email : lcmmljs@foxmail.com
  5. # @File : main.py
  6. # @Project : Project

  7. import glob
  8. import PySimpleGUI as sg
  9. from PyPDF2 import PdfFileReader, PdfFileWriter

  10. # 创建GUI布局
  11. fra1 = sg.Frame('打开文件夹', [[sg.InputText(key='-IN-'), sg.FolderBrowse('文件位置')], [sg.Button('确认')]])
  12. fra2 = sg.Frame('文件列表', [[sg.Listbox(values=[''], s=(54, 30), key='-LIST-')],
  13.                          [sg.Button('上移'), sg.Button('下移'), sg.Button('移除'), sg.Button('合并')]])

  14. col = sg.Column([[fra1], [fra2]], pad=(0, 0))

  15. layout = [[col]]
  16. window = sg.Window('合并PDF', layout, keep_on_top=True)

  17. # 创建程序主循环
  18. while True:
  19.     event, value = window.read()
  20.     if event is None:
  21.         break
  22.     elif event == '确认':
  23.         if value['-IN-'] != '':
  24.             path = window['-IN-'].get() + '/*.pdf'
  25.             file = glob.glob(path)
  26.             if file:
  27.                 filefloder = file[0].split('\\')[0] + '/'
  28.                 filename = [i.split('\\')[-1] for i in file]
  29.                 window['-LIST-'].update(filename)
  30.             else:
  31.                 sg.popup_ok('文件夹内未识别到PDF文件~', title='错误', keep_on_top=True)
  32.         else:
  33.             sg.popup_ok('请选择文件夹~', title='错误', keep_on_top=True)
  34.     elif event == '上移':
  35.         try:
  36.             choice = value['-LIST-']
  37.             index = filename.index(choice[0])
  38.             filename[index], filename[index-1] = filename[index-1], filename[index]
  39.             window['-LIST-'].update(filename)
  40.         except NameError:
  41.             pass
  42.     elif event == '下移':
  43.         try:
  44.             choice = value['-LIST-']
  45.             index = filename.index(choice[0])
  46.             filename[index], filename[index+1] = filename[index+1], filename[index]
  47.             window['-LIST-'].update(filename)
  48.         except NameError:
  49.             pass
  50.     elif event == '移除':
  51.         try:
  52.             choice = value['-LIST-'][0]
  53.             filename.remove(choice)
  54.             window['-LIST-'].update(filename)
  55.         except NameError:
  56.             pass
  57.         except IndexError:
  58.             pass
  59.     elif event == '合并':
  60.         try:
  61.             if filename:
  62.                 file = [filefloder + i for i in filename]
  63.                 pdfFileWriter = PdfFileWriter()
  64.                 for pdf in file:
  65.                     pdfReader = PdfFileReader(open(pdf, 'rb'))
  66.                     numPages = pdfReader.getNumPages()
  67.                     for i in range(0, numPages):
  68.                         pageObj = pdfReader.getPage(i)
  69.                         pdfFileWriter.addPage(pageObj)
  70.                 folder = sg.popup_get_folder('请选择文件保存位置:', title='提示', keep_on_top=True)
  71.                 pdfFileWriter.write(open(folder + '//合并文件.pdf', 'wb'))
  72.                 sg.popup_ok('文件已合并完成~', keep_on_top=True)
  73.         except NameError:
  74.             pass
  75. window.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-8 19:26:49 | 显示全部楼层
本帖最后由 楪祈53409 于 2023-6-8 19:30 编辑

你好,我对你的代码进行了维护,修改了部分被废弃的函数.
我在py3.0上运行的,初次运行没安装库的先win+r分别运行
  1. pip install PySimpleGUI
复制代码
  1. pip install PyPDF2
复制代码

安装所需的库.
以下是我维护好的代码:
  1. import glob
  2. import PySimpleGUI as sg
  3. from PyPDF2 import PdfWriter, PdfReader

  4. fra1 = sg.Frame('打开文件夹', [[sg.InputText(key='-IN-'), sg.FolderBrowse('文件位置')], [sg.Button('确认')]])
  5. fra2 = sg.Frame('文件列表', [[sg.Listbox(values=[''], size=(54, 30), key='-LIST-')],
  6.                          [sg.Button('上移'), sg.Button('下移'), sg.Button('移除'), sg.Button('合并')]])

  7. col = sg.Column([[fra1], [fra2]], pad=(0, 0))

  8. layout = [[col]]
  9. window = sg.Window('合并PDF', layout, keep_on_top=True)

  10. filename = []

  11. while True:
  12.     event, value = window.read()
  13.     if event is None:
  14.         break
  15.     elif event == '确认':
  16.         if value['-IN-'] != '':
  17.             path = value['-IN-'] + '/*.pdf'
  18.             file = glob.glob(path)
  19.             if file:
  20.                 filefolder = file[0].split('\\')[0] + '/'
  21.                 filename = [i.split('\\')[-1] for i in file]
  22.                 window['-LIST-'].update(filename)
  23.             else:
  24.                 sg.popup_ok('文件夹内未识别到PDF文件~', title='错误', keep_on_top=True)
  25.         else:
  26.             sg.popup_ok('请选择文件夹~', title='错误', keep_on_top=True)
  27.     elif event == '上移':
  28.         try:
  29.             choice = value['-LIST-']
  30.             index = filename.index(choice[0])
  31.             filename[index], filename[index-1] = filename[index-1], filename[index]
  32.             window['-LIST-'].update(filename)
  33.         except NameError:
  34.             pass
  35.     elif event == '下移':
  36.         try:
  37.             choice = value['-LIST-']
  38.             index = filename.index(choice[0])
  39.             filename[index], filename[index+1] = filename[index+1], filename[index]
  40.             window['-LIST-'].update(filename)
  41.         except NameError:
  42.             pass
  43.         except IndexError:
  44.             pass
  45.     elif event == '移除':
  46.         try:
  47.             choice = value['-LIST-'][0]
  48.             filename.remove(choice)
  49.             window['-LIST-'].update(filename)
  50.         except NameError:
  51.             pass
  52.         except IndexError:
  53.             pass
  54.     elif event == '合并':
  55.         try:
  56.             if filename:
  57.                 file = [filefolder + i for i in filename]
  58.                 pdfFileWriter = PdfWriter()
  59.                 for pdf in file:
  60.                     pdfReader = PdfReader(open(pdf, 'rb'))
  61.                     for page in pdfReader.pages:
  62.                         pdfFileWriter.add_page(page)
  63.                 folder = sg.popup_get_folder('请选择文件保存位置:', title='提示', keep_on_top=True)
  64.                 with open(folder + '/合并文件.pdf', 'wb') as output_pdf:
  65.                     pdfFileWriter.write(output_pdf)
  66.                 sg.popup_ok('文件已合并完成~', keep_on_top=True)
  67.         except NameError:
  68.             pass

  69. window.close()
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 00:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表