Python實戰(zhàn)之 多pdf文件合成

? ? ? ? 選擇君 作為一個嵌入式工程師打颤,受夠了C語言的各種“低級”暴拄。趁著潮流,想學(xué)學(xué)最近大火的python编饺,期望來年能找個好工作~乖篷。為了增加樂趣期間,還是以實戰(zhàn)為主透且。

? ? ? ? 選擇君每個月都要報銷餐補撕蔼,也就有很多電子發(fā)票要打印。每到此時秽誊,就是一件特別讓人惱火的事情鲸沮。尤其有一次女朋友給找了60幾張 60塊錢的電子發(fā)票。那感覺养距。诉探。。(當(dāng)然~是把這些用軟件合在一起棍厌,然后打印出來噠肾胯,一張張點,不存在的)耘纱。用軟件到時可以實現(xiàn)敬肚,但如果能腳本一件生成,那便是再好不過的事情了束析。

那就讓我們來實現(xiàn)吧:

? ? ? ? python 之所以省力艳馒,是因為有很多底層封裝好的module可以使用。要操作pdf员寇,當(dāng)然要import一個pdf的module:PyPDF2

import PyPDF2,os

1. 安裝 PyPDF2?

pip install PyPDF2

2. 引用+生成路徑下pdf文件列表

import PyPDF2弄慰,os

#1. get all pdf in current loaction

pdfs = []

for filename in os.listdir('.'): #在路徑下所有文件中,查找 pdf 文件

? ? if filename.endswith('.pdf'):

? ? ? ? pdfs.append(filename)

if pdfs == []:

? ? print ("no pdf in this file, please double check")

pdfs.sort(key=str.lower)

3. 調(diào)用 PyPDF2.PdfFileWriter(), 用來放合成之后的pdf

pdfWriter = PyPDF2.PdfFileWriter()

4. 調(diào)用 PyPDF2.PdfFileRead(), 用來讀取所有pdf中的內(nèi)容蝶锋,并合成到 pdfWriter中:

fileCount = 0

pageCount = 0

for filename in pdfs:

? ? pdfFileObj = open(filename,'rb')

? ? print("file:"+filename+" combining")

? ? pdfReader? = PyPDF2.PdfFileReader(pdfFileObj)

? ? fileCount += 1


? ? #3.1 get all pages from read file, and then combine to one

? ? for pageNum in range(0,pdfReader.numPages):

? ? ? ? pageObj = pdfReader.getPage(pageNum)

? ? ? ? pdfWriter.addPage(pageObj)

? ? ? ? pageCount += 1

? ? #pdfFileObj.close()

print("combine sucess: %d files, %d pages combined"%(fileCount,pageCount))

5. 將合成的pdf 寫入文件中陆爽,并將之前打開的文件關(guān)閉掉

注:選擇君本來是打算在第4部關(guān)閉之前打開的pdf的,但如果那時候打開扳缕,最后合成的文件會是一個由空白頁構(gòu)成的pdf慌闭。想了一下别威,合成的時候,應(yīng)該只是將“指針”傳給了 pdfWriter驴剔。在pdfWriter寫入磁盤之前省古,如果關(guān)閉文件,就找不到內(nèi)容了丧失。所以豺妓,我們在合成文件寫入磁盤之后,再關(guān)閉之

#4 save the write page

pdfOutput = open('result1.pdf','wb')

pdfWriter.write(pdfOutput)

pdfOutput.close()

#5 close other pdf files

for filename in pdfs:

? ? pdfFileObj = open(filename,'rb')

? ? pdfFileObj.close()

OK布讹,這樣就可以將目錄下的所有文件科侈,合成出了一個 “result1.pdf”啦

整體的源代碼如下:

#! python3

# combine multiple pdf file to one

import PyPDF2, os

#1. get all pdf in current loaction

pdfs = []

for filename in os.listdir('.'):

? ? if filename.endswith('.pdf'):

? ? ? ? pdfs.append(filename)

if pdfs == []:

? ? print ("no pdf in this file, please double check")

pdfs.sort(key=str.lower)

#2. create a empty pdf as the dest pdf

pdfWriter = PyPDF2.PdfFileWriter()

#3. read all pdfs, and combine to 1

fileCount = 0

pageCount = 0

for filename in pdfs:

? ? pdfFileObj = open(filename,'rb')

? ? print("file:"+filename+" combining")

? ? pdfReader? = PyPDF2.PdfFileReader(pdfFileObj)

? ? fileCount += 1


? ? #3.1 get all pages from read file, and then combine to one

? ? for pageNum in range(0,pdfReader.numPages):

? ? ? ? pageObj = pdfReader.getPage(pageNum)

? ? ? ? pdfWriter.addPage(pageObj)

? ? ? ? pageCount += 1

? ? #pdfFileObj.close()

print("combine sucess: %d files, %d pages combined"%(fileCount,pageCount))

#4 save the write page

pdfOutput = open('result1.pdf','wb')

pdfWriter.write(pdfOutput)

pdfOutput.close()

#5 close other pdf files

for filename in pdfs:

? ? pdfFileObj = open(filename,'rb')

? ? pdfFileObj.close()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市炒事,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔫慧,老刑警劉巖挠乳,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姑躲,居然都是意外死亡睡扬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門黍析,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卖怜,“玉大人,你說我怎么就攤上這事阐枣÷砜浚” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵蔼两,是天一觀的道長甩鳄。 經(jīng)常有香客問我,道長额划,這世上最難降的妖魔是什么妙啃? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮俊戳,結(jié)果婚禮上揖赴,老公的妹妹穿的比我還像新娘。我一直安慰自己抑胎,他們只是感情好燥滑,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著圆恤,像睡著了一般突倍。 火紅的嫁衣襯著肌膚如雪腔稀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天羽历,我揣著相機與錄音焊虏,去河邊找鬼。 笑死秕磷,一個胖子當(dāng)著我的面吹牛诵闭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播澎嚣,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼疏尿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了易桃?” 一聲冷哼從身側(cè)響起褥琐,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晤郑,沒想到半個月后敌呈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡造寝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年磕洪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诫龙。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡析显,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出签赃,到底是詐尸還是另有隱情谷异,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布锦聊,位于F島的核電站晰绎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏括丁。R本人自食惡果不足惜荞下,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望史飞。 院中可真熱鬧尖昏,春花似錦、人聲如沸构资。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吐绵。三九已至迹淌,卻和暖如春河绽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唉窃。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工耙饰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人纹份。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓苟跪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔓涧。 傳聞我的和親對象是個殘疾皇子件已,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容