查看: 525|回复: 10

[原创工具] pdf合并工具

  [复制链接]
发表于 2020-11-6 08:13 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

pdf合并工具

最近需要合并大量的pdf, 找了几个工具,要么收费,要么不好用,然后就自己写了简单功能的小工具.
特点就是把当前目录及子目录下的所有pdf文件合并成一个merged.pdf (比如你直接放在D盘根目录会把你D盘里面的所有pdf全部合并成一个, 会很占内存和时间)
除了方便打印我也不知道有什么其他的作用, 反正我就是拿来打印的

已知BUG
1. 某些特殊编码的pdf合并会失败(没找到解决办法), 而且也无法确定是哪一个文件---整个文件保存失败也就是完全无法合并
2. 某些pdf会因为不知道什么原因无法读取xref,无法打开  --- 解决办法 : 使用浏览器或者其他什么可以打开pdf的程序确定程序可以打开, 然后点击打印, 通过虚拟打印机再保存出来, 就可以修复了.

如果你嫌弃他会输出很多警告信息的话可以去pypdf4包的源码中把那些警告输出注释掉, 具体方法就不讲了, 如果有需要可以私信我

本来想直接上传打包后的exe, 大小超了, 只提供天翼网盘连接:https://cloud.189.cn/t/A73QzqmQRjMz (访问码:kpo0)

写的很简单, 高手勿喷

为大佬提供源码:
  1. import re
  2. from PyPDF4.pdf import PdfFileReader as pr, PdfFileWriter as pw


  3. def MergePDF(dir_path):
  4.     pdf_files = list()
  5.     merged_file = pw()
  6.     for path, _, files in os.walk(dir_path):
  7.         pdf_files.extend([os.path.join(path, f)
  8.                           for f in files if f.lower().endswith('.pdf')])  # 遍历当前文件夹下所有pdf文件并组合成相对路径

  9.     pdf_files.sort(key=lambda i: int(re.findall(r'(\d+).*?', i)
  10.                                      [0]) if re.findall(r'(\d+).*?', i) else -1)  # 按照路径排序(没有数字的在前面, 有数字的从小到大排序)

  11.     for pdf_file in pdf_files:
  12.         print(pdf_file)
  13.         try:
  14.             pdf = pr(open(pdf_file, "rb"))
  15.         except:
  16.             print(f'{pdf_file}无法解析')
  17.             continue
  18.         if pdf.isEncrypted:
  19.             print(f'{pdf_file} 是加密文件')
  20.             res = input('输入密码(回车键跳过)')
  21.             while res:
  22.                 try:
  23.                     pdf.decrypt(res)  # pdf 解密
  24.                     break
  25.                 except:
  26.                     print('密码错误')
  27.                 res = input('输入密码(回车键跳过)')
  28.             if not res:
  29.                 continue
  30.         pageCount = pdf.getNumPages()
  31.         # 分别将page添加到输出output中
  32.         for iPage in range(pageCount):
  33.             merged_file.addPage(pdf.getPage(iPage))
  34.     with open('merged.pdf', "wb") as outputfile:
  35.         # 注意这里的写法和正常的上下文文件写入是相反的
  36.         merged_file.write(outputfile)
  37.     print('Done')
  38.     input()


  39. if __name__ == '__main__':
  40.     # 设置存放多个pdf文件的文件夹
  41.     dir_path = r'.'
  42.     MergePDF(dir_path)
复制代码


如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2020-11-6 08:14 | 显示全部楼层
谢谢分享!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-6 09:14 | 显示全部楼层
多谢分享多谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-6 11:18 | 显示全部楼层
感谢分享,必须支持
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-6 12:25 | 显示全部楼层
多谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-6 12:26 | 显示全部楼层
6666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-6 16:59 | 显示全部楼层
谢谢楼主分享,先收藏了。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-8 02:43 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-8 09:53 | 显示全部楼层
谢谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-11-10 15:50 | 显示全部楼层

不错不错~~~~~
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
返回顶部