📢作者: 小小明-代碼實體
📢博客主頁:https://blog.csdn.net/as604049322
📢歡迎點贊 👍 收藏 ?留言 📝 歡迎討論!
之前在《PDF批量拆分、合并、書簽提取、書簽寫入小工具》一文中分享了一個GUI小工具,不過合并功能局限在一個文件夾之內(nèi)。最近看到了陳老師的推文,于是下載了他的《數(shù)據(jù)分析思維手冊》,結(jié)果發(fā)現(xiàn)pdf文件分散到多個文件夾,而且每個PDF都沒有目錄:
那么我們完全可以遞歸合并它們并根據(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):
開始運行代碼進行合并:
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é)果:
經(jīng)測試,目錄定位的完全準(zhǔn)確。