打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
递归合并PDF按文件夹和文件名生成目录


📢作者: 小小明-代码实体

📢博客主页:https://blog.csdn.net/as604049322

📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论!

之前在《PDF批量拆分、合并、书签提取、书签写入小工具》一文中分享了一个GUI小工具,不过合并功能局限在一个文件夹之内。最近看到了陈老师的推文,于是下载了他的《数据分析思维手册》,结果发现pdf文件分散到多个文件夹,而且每个PDF都没有目录:

那么我们完全可以递归合并它们并根据文件夹和文件名生成目录,这样就方便阅读的多。

经过我几番测试,最终编写的完整代码为:

from PIL import Image, ImageFont, ImageDraw
import re
import os
from PyPDF2 import PdfFileReader, PdfFileWriter


class PDFMerge:
    "作者:小小明  博客地址:https://xxmdmst.blog.csdn.net/"
    @staticmethod
    def get_mark_img(text, size=30):
        width = len(text) * size
        mark = Image.new(mode='RGB', size=(
            width, size+20), color=(255, 255, 255))
        ImageDraw.Draw(im=mark)             .text(xy=(0, 0),
                  text=text,
                  fill="black",
                  font=ImageFont.truetype('msyhbd.ttc', size=size))
        mark.save("watermark.pdf", "PDF", resolution=100.0, save_all=True)
        return mark

    @staticmethod
    def windows_files_sort(files):
        files.sort(key=lambda s: [(s, int(n))
                   for s, n in re.findall('(\D+)(\d+)', f'a{s}0')])

    def __merge_pdf_in(self, path, parent=None):
        files = []
        dirs = []
        for file in os.listdir(path):
            file = os.path.join(path, file)
            if os.path.isfile(file):
                if file.endswith(".pdf"):
                    files.append(file)
            elif os.path.isdir(file):
                dirs.append(file)
        PDFMerge.windows_files_sort(files)
        PDFMerge.windows_files_sort(dirs)

        for pdf_file in files:
            pdf_reader = PdfFileReader(pdf_file)
            pdf_file = os.path.basename(pdf_file)
            pageCount = pdf_reader.getNumPages()
            print(pdf_file, pageCount, self.pagenum_total)
            for page in pdf_reader.pages:
                page.compressContentStreams()
                self.pdf_writer.addPage(page)
            self.pdf_writer.addBookmark(
                pdf_file[:pdf_file.rfind(".")], self.pagenum_total, parent=parent)
            self.pagenum_total += pageCount
        for path in dirs:
            title = os.path.basename(path)
            print(title, self.pagenum_total)
            PDFMerge.get_mark_img(title)
            watermark = PdfFileReader('watermark.pdf').getPage(0)
            self.pdf_writer.addPage(watermark)
            parent_id = self.pdf_writer.addBookmark(
                title, self.pagenum_total, parent=parent)
            self.pagenum_total += 1
            self.__merge_pdf_in(path, parent=parent_id)

    def merge_pdf(self, path, out_name):
        self.pagenum_total = 0
        self.pdf_writer = PdfFileWriter()
        self.__merge_pdf_in(path)
        os.remove('watermark.pdf')
        print("总页数:", self.pagenum_total)
        print("开始写出到文件")
        with open(out_name, "wb") as outputfile:
            self.pdf_writer.write(outputfile)
        print("PDF文件合并完成")

然后我先将文件调整到如下结构:

开始运行代码进行合并:

pdfmerge = PDFMerge()
path = "D:\电子书\《数据分析思维手册和职场真相》"
pdfmerge.merge_pdf(path, "数据分析思维手册和职场真相.pdf")
1数据分析思维手册 0
《数据分析思维手册》目录.pdf 页数: 2 1
1第一章、数据分析方法 3
1.1、数据分析方法.pdf 页数: 7 4
1.2、没有数据分析思路,怎么办.pdf 页数: 6 11
1.3、数据分析如何赋能业务.pdf 页数: 9 17
1.4、如何梳理数据指标体系.pdf 页数: 10 26
1.5、如何做一个优秀的数据分析项目.pdf 页数: 8 36
1.6、数据分析师如何打造数据产品.pdf 页数: 7 44
1.7、如何落地数据分析成果.pdf 页数: 6 51
2第二章、数据运营 57
2.1、如何搭建数据运营体系.pdf 页数: 6 58
2.2、数据分析如何支持运营迭代.pdf 页数: 7 64
2.3、为什么运营不看你的数据分析.pdf 页数: 7 71
2.4、免与运营吵架的基本方法.pdf 页数: 7 78
2.5、如何给出运营建议.pdf 页数: 8 85
3第三章、用户画像 93
3.1、用户画像怎么做.pdf 页数: 6 94
3.2、用户画像的基础操作.pdf 页数: 8 100
3.3、B2B的用户画像.pdf 页数: 9 108
3.4、用户画像报告的撰写.pdf 页数: 6 117
4第四章、数据分析报告 123
4.1、数据报告的正确写法.pdf 页数: 7 124
4.2、数据报告的错误写法.pdf 页数: 7 131
4.3、数据报告如何写“建议”.pdf 页数: 8 138
4.4、为何数据报告没人看.pdf 页数: 7 146
4.5、如何写才有人看.pdf 页数: 7 153
5第五章、实战案例 160
5.1、如何满足运营的需求.pdf 页数: 8 161
5.2、如何满足销售的要求.pdf 页数: 8 169
5.3、如何做“可执行”的分析.pdf 页数: 8 177
5.4、如何开展多维度分析.pdf 页数: 9 185
5.5、如何解决企业复杂问题.pdf 页数: 7 194
2数据分析师的职场真相 201
《数据分析师的职场真相》目录.pdf 页数: 1 202
第一章、求职系列 203
6.1、找数据分析工作难不难.pdf 页数: 5 204
6.2、自我评价怎么写.pdf 页数: 5 209
6.3、工作经验怎么写.pdf 页数: 5 214
6.4、投简历的技巧.pdf 页数: 4 219
第二章、职场真相 223
7.1、数据分析师的绩效如何考核.pdf 页数: 5 224
7.2、数据分析师的晋升之路.pdf 页数: 7 229
7.3、为什么数据分析师比其他岗位幸福.pdf 页数: 6 236
7.4、数据分析师内幕揭秘.pdf 页数: 5 242
7.5、数据分析对企业有什么用.pdf 页数: 5 247
7.6、数据分析、数据挖掘、数据运营有什么区别.pdf 页数: 4 252
总页数: 256
开始写出到文件
PDF文件合并完成

合并结果:

经测试,目录定位的完全准确。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何分割、合并PDF文件-PDFMerge
一周的工作1天干完/python+Delphi自动化记录
度亡秘语​页数:62​格式:pdf
壁錄遁甲天書​页数:83筒子页​格式:pdf
Py:利用pyautogui实现自动将pdf文件(需手动设定pdf总页数)自动翻页并截取另存为图片形式,或自动隔0.1秒自动截笔记本全屏保存到指定文件夹
iOS 队列请求-超实用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服