暑假的时候,我在网上买了很多电子版的剧本杀,里面有很多pdf文件,需要自己打印下来玩。
然后我就想啊,几十个pdf,一个一个打开,再一个一个打印,那多麻烦。
干脆自己用Python搞个小程序,把所有pdf文件都合成一个,一个文件直接打印多方便!

1.导入库文件包

我使用了PyPDF2这个第三方库文件包,还需要导入os文件操作包

import os
from PyPDF2 import PdfFileMerger
from PyPDF2 import PdfFileReader

2.获取pdf页数的函数

如果pdf文件有密码,需要在decrypt函数输入密码

#获取pdf页数的函数
def getPdfPages(filePath):reader = PdfFileReader(filePath)#解密pdf文件if reader.isEncrypted:reader.decrypt('')pageNum = reader.getNumPages()return pageNum

3.存储所有pdf文件路径的函数

获取文件夹下所有pdf文件的路径(包括多级子目录下的pdf文件路径)

#存储所有pdf文件路径的函数
def loadAllFilesPath(rootPath,filePaths):#分别代表根目录、文件夹、文件for root, dirs, files in os.walk(rootPath):#遍历文件for file in files:#识别pdf文件if file.endswith('.pdf') or file.endswith('.PDF'):#获取文件绝对路径filePath = os.path.join(root, file)#文件路径添加进列表filePaths.append(filePath)

4.程序主体

我还增加了一个页码索引的功能,可以在合并完成后,打开新生成的txt文件,找到原pdf文件对应的页码索引

#输入根目录的文件夹
rootPath = input('请输入文件夹:')#存储所有pdf文件路径的列表
pdfPaths = []
#存储所有pdf文件的页码和索引
pageCount = 0
pageIndex = []#找到所有pdf文件路径,并存储所有pdf文件路径到列表中
loadAllFilesPath(rootPath,pdfPaths)#创建pdf合成器对象
fileMerger = PdfFileMerger()
#合并pdf文件
for pdfPath in pdfPaths:fileMerger.append(pdfPath)page = getPdfPages(pdfPath)pageIndex.append('页码索引:' + str(pageCount+1) + '~' + str(pageCount+page))pageCount += page#创建保存新文件的文件夹
newDirPath = os.path.join(rootPath,'合并完成的文件')
if not os.path.exists(newDirPath):os.mkdir(newDirPath)
#保存合并完成的pdf文件
fileMerger.write(os.path.join(newDirPath,'合并完成的pdf文件.pdf'))
#保存合并pdf文件的顺序
with open(os.path.join(newDirPath,'合并pdf文件的顺序.txt'),'w',encoding='utf-8') as f:for pdfPath,pdfInd in zip(pdfPaths,pageIndex):f.write(pdfPath + '\t\t' + pdfInd + '\n')#pdf文件合并成功!
print('pdf文件合并成功,请查看文件夹“合并完成的文件”')

5.程序测试

以剧本“良辰吉日”为例,文件结构如下:

  • 根目录

    • 组织者手册.pdf
    • 剧本
      • 含烟.pdf
      • 静虚子.pdf
      • 梁仁甫.pdf
      • 柳眠.pdf
      • 妙玄.pdf
      • 武夫人.pdf
      • 武仲文.pdf
      • 殷思齐.pdf
    • 线索
      • 其它

        • 地图背景名词解释.pdf
        • 静虚子记忆.pdf
      • 含烟线索.pdf
      • 静虚子线索.pdf
      • 梁仁甫线索.pdf
      • 柳眠线索.pdf
      • 妙玄线索.pdf
      • 武夫人线索.pdf
      • 武仲文线索.pdf
      • 殷思齐线索.pdf
      • 庭院线索.pdf

下面进行程序测试:



6.程序封装为exe文件(需要提前安装pyinstaller包,可以自行百度)

文件在终端打开

输入:pyinstaller -F pdf合并.py

回车,运行成功!

在py文件的同一层级,会出现一个dist文件夹,里面就能找到生成的exe文件啦!

用Python合并文件夹下所有pdf文件(包括多级子目录下的pdf文件)相关推荐

  1. Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数

    Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数 文件夹中获取需要转换的文件数,将其全部转换或可单独转换单个文件,并获取转成PD ...

  2. 地理国情监测,arcpy将文件夹多个gdb的要素数据集Dataset下的要素类featureClass,使用FeatureClassToShapefile_conversion转换成shapefile

    地理国情监测,arcpy将文件夹多个gdb的要素数据集Dataset下的要素类featureClass,使用FeatureClassToShapefile_conversion转换成shapefile ...

  3. android 短信数据库在哪个文件夹,安卓手机的短信备份后存到了哪个文件夹下

    打开备份短信的方法: 1.通过电脑找回手机短信内容的最基本思路,即将保存手机短信容的数据库文件传输到电信上,用相关手机信看工具进找回,对此需要借助第三方ROOt工获取手机ROOT权限. 2.并非所有手 ...

  4. 2021-12-09把文件夹1中的与文件夹2里同名图片删除或者保存至另一个文件夹

    如果文件夹1(大)的里面包含了与文件夹2(小)的同名图片: # !/usr/bin/env python # encoding: utf-8import os import glob from PIL ...

  5. 2021-11-03如何删除文件夹名中间有【空格】及后边带有“..”的文件夹

    文章目录 如何删除文件夹名中间有[空格]及后边带有".."的文件夹 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入 ...

  6. c盘python27文件夹可以删除嘛_告诉你C盘里的文件夹哪个能删

    1 Documents and Settings是什么文件?答案: 是系统用户设置文件夹,包括各个用户的文档.收藏夹.上网浏览信息.配置文件等. 补:这里面的东西不要随便删除,这保存着所有用户的文档和 ...

  7. 无法删除文件夹的情况:文件夹正在使用,操作无法完成,因为其中的文件,或文件夹已在另一个程序中打开...

    在删除文件夹的时候,可能会遇到文件夹正在使用,操作无法完成,因为其中的文件,或文件夹已在另一个程序中打开,请关闭该文件夹或或文件,然后重试.这类无法关闭删除文件夹的情况,如下图所示. 如何解决 解决这 ...

  8. DevOps进阶(十)Jenkins组包时解决无法删除文件夹的情况:文件夹正在使用,操作无法完成,因为其中的文件,或文件夹已在另一个程序中打开...

    在删除文件夹的时候,可能会遇到文件夹正在使用,操作无法完成,因为其中的文件,或文件夹已在另一个程序中打开,请关闭该文件夹或或文件,然后重试.这类无法关闭删除文件夹的情况,如下图所示. 解决这个的关键是 ...

  9. mac同步linux文件夹在哪里设置,Linux和Mac上的一些特殊文件将不再同步

    近日有用户报告, Mac/Linux上创建的某些文件, 无法成功同步到Windows平台上. 我们对这个问题进行了修正.  这个修正可能会影响到Linux和Mac用户中的极少数, 大概为数百位用户. ...

  10. 手机删除.android_secure文件夹后只能接电话了,关于安卓手机里的文件夹及其由来,哪些可删哪些不可删,注意了!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 很多手机用户都不知道手机上的一些文件夹是干什么的.刚才碰巧见到这个东西,觉得很有必要与大家一起分享!! 1..android_secure 是官方app2 ...

最新文章

  1. (原创)c++primer(第五版)--1.3 注释简介
  2. java回顾之继承 二
  3. 在线模拟器RollerCoin使采矿业重回游戏
  4. python写水仙花的作文_python自动打开浏览器下载zip,并且提取内容写入excel
  5. AliOS Things蓝牙协议栈及应用开发框架介绍
  6. CPU VS GPU笔记
  7. Bootstrap 分页导航中的翻页组件
  8. if __name__ == __main___一文搞懂 if __name__ == #39;__main__#39;
  9. JAVA实现上传,下载,jxl操作Excel和邮件发送
  10. 用几行代码写的bat小病毒
  11. javascript 构造函数方式定义对象 (转载)
  12. linux下使用opengL Glad + EGL问题记录
  13. Java 大文件分片上传
  14. 自动关机win10_如何设置电脑自动关机
  15. html新年礼物,特别的新年礼物 特殊的新年礼物
  16. 兼容所有浏览器的Web打印控件的设计方案
  17. 历史上的今天:大型计算机先驱和小型机之父诞生;中国雅虎邮箱成历史
  18. 3S处理技术 -MapGIS转换shp攻略
  19. OSPF prefix-suppression Test
  20. ResultSet(结果集)、Statement

热门文章

  1. [ 渗透工具篇 ] sqlmap 详解(一) sqlmap 安装详解
  2. PS 钢笔工具如何拖拽滑杆
  3. 计算机基础备课计划,《计算机应用基础》教学计划备课讲稿.doc
  4. windows编程--网络编程学习--winsock编程(2)
  5. 回顾2020的爷青结:有哪些记忆里的应用正在消逝!
  6. visio自己画的图怎么填充_Visio怎么画直线并填充颜色?
  7. jsp网上零食销售网站系统
  8. 趋势安全软件卸载:如何不需要密码或忘记密码卸载Trend Micro OfficeScan Agent?
  9. SSM环境+jquery+ajax 实现批量文件上传并预览后,同时上传文件和数据 校验图片后缀是否合法 文件大小是否超限
  10. nginx+lua搭建文件上传下载服务