小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

遞歸合并PDF按文件夾和文件名生成目錄

 小小明代碼實體 2022-09-01 發(fā)布于廣東


📢作者: 小小明-代碼實體

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

📢歡迎點贊 👍 收藏 ?留言 📝 歡迎討論!

之前在《PDF批量拆分、合并、書簽提取、書簽寫入小工具》一文中分享了一個GUI小工具,不過合并功能局限在一個文件夾之內(nèi)。最近看到了陳老師的推文,于是下載了他的《數(shù)據(jù)分析思維手冊》,結(jié)果發(fā)現(xiàn)pdf文件分散到多個文件夾,而且每個PDF都沒有目錄:

image-20220901171223791

那么我們完全可以遞歸合并它們并根據(jù)文件夾和文件名生成目錄,這樣就方便閱讀的多。

經(jīng)過我?guī)追瑴y試,最終編寫的完整代碼為:

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("總頁數(shù):", self.pagenum_total)
        print("開始寫出到文件")
        with open(out_name, "wb") as outputfile:
            self.pdf_writer.write(outputfile)
        print("PDF文件合并完成")

然后我先將文件調(diào)整到如下結(jié)構(gòu):

image-20220901172006094

開始運行代碼進行合并:

pdfmerge = PDFMerge()
path = "D:\電子書\《數(shù)據(jù)分析思維手冊和職場真相》"
pdfmerge.merge_pdf(path, "數(shù)據(jù)分析思維手冊和職場真相.pdf")
1數(shù)據(jù)分析思維手冊 0
《數(shù)據(jù)分析思維手冊》目錄.pdf 頁數(shù): 2 1
1第一章、數(shù)據(jù)分析方法 3
1.1、數(shù)據(jù)分析方法.pdf 頁數(shù): 7 4
1.2、沒有數(shù)據(jù)分析思路,怎么辦.pdf 頁數(shù): 6 11
1.3、數(shù)據(jù)分析如何賦能業(yè)務(wù).pdf 頁數(shù): 9 17
1.4、如何梳理數(shù)據(jù)指標(biāo)體系.pdf 頁數(shù): 10 26
1.5、如何做一個優(yōu)秀的數(shù)據(jù)分析項目.pdf 頁數(shù): 8 36
1.6、數(shù)據(jù)分析師如何打造數(shù)據(jù)產(chǎn)品.pdf 頁數(shù): 7 44
1.7、如何落地數(shù)據(jù)分析成果.pdf 頁數(shù): 6 51
2第二章、數(shù)據(jù)運營 57
2.1、如何搭建數(shù)據(jù)運營體系.pdf 頁數(shù): 6 58
2.2、數(shù)據(jù)分析如何支持運營迭代.pdf 頁數(shù): 7 64
2.3、為什么運營不看你的數(shù)據(jù)分析.pdf 頁數(shù): 7 71
2.4、免與運營吵架的基本方法.pdf 頁數(shù): 7 78
2.5、如何給出運營建議.pdf 頁數(shù): 8 85
3第三章、用戶畫像 93
3.1、用戶畫像怎么做.pdf 頁數(shù): 6 94
3.2、用戶畫像的基礎(chǔ)操作.pdf 頁數(shù): 8 100
3.3、B2B的用戶畫像.pdf 頁數(shù): 9 108
3.4、用戶畫像報告的撰寫.pdf 頁數(shù): 6 117
4第四章、數(shù)據(jù)分析報告 123
4.1、數(shù)據(jù)報告的正確寫法.pdf 頁數(shù): 7 124
4.2、數(shù)據(jù)報告的錯誤寫法.pdf 頁數(shù): 7 131
4.3、數(shù)據(jù)報告如何寫“建議”.pdf 頁數(shù): 8 138
4.4、為何數(shù)據(jù)報告沒人看.pdf 頁數(shù): 7 146
4.5、如何寫才有人看.pdf 頁數(shù): 7 153
5第五章、實戰(zhàn)案例 160
5.1、如何滿足運營的需求.pdf 頁數(shù): 8 161
5.2、如何滿足銷售的要求.pdf 頁數(shù): 8 169
5.3、如何做“可執(zhí)行”的分析.pdf 頁數(shù): 8 177
5.4、如何開展多維度分析.pdf 頁數(shù): 9 185
5.5、如何解決企業(yè)復(fù)雜問題.pdf 頁數(shù): 7 194
2數(shù)據(jù)分析師的職場真相 201
《數(shù)據(jù)分析師的職場真相》目錄.pdf 頁數(shù): 1 202
第一章、求職系列 203
6.1、找數(shù)據(jù)分析工作難不難.pdf 頁數(shù): 5 204
6.2、自我評價怎么寫.pdf 頁數(shù): 5 209
6.3、工作經(jīng)驗怎么寫.pdf 頁數(shù): 5 214
6.4、投簡歷的技巧.pdf 頁數(shù): 4 219
第二章、職場真相 223
7.1、數(shù)據(jù)分析師的績效如何考核.pdf 頁數(shù): 5 224
7.2、數(shù)據(jù)分析師的晉升之路.pdf 頁數(shù): 7 229
7.3、為什么數(shù)據(jù)分析師比其他崗位幸福.pdf 頁數(shù): 6 236
7.4、數(shù)據(jù)分析師內(nèi)幕揭秘.pdf 頁數(shù): 5 242
7.5、數(shù)據(jù)分析對企業(yè)有什么用.pdf 頁數(shù): 5 247
7.6、數(shù)據(jù)分析、數(shù)據(jù)挖掘、數(shù)據(jù)運營有什么區(qū)別.pdf 頁數(shù): 4 252
總頁數(shù): 256
開始寫出到文件
PDF文件合并完成

合并結(jié)果:

image-20220901172427755

經(jīng)測試,目錄定位的完全準(zhǔn)確。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多