今天有乙個問題,就是需要實現提取某個pdf文件的某幾頁,合併到另外乙個pdf文件中,想用我的pdf編輯工具實現此功能,發現需要收費,那怎麼能行。想到之前用python處理過word和excel,此時萌生了另外乙個想法,那就是萬能的python有沒有對應的庫呢?網上一查還真的有,那就是pypdf2直接pip install pypdf2。很快便實現了我想要的結果,特此記錄!
#coding=utf-8
"""利用python對pdf進行切分和合併
2019/4/18
@zjh
"""from pypdf2 import pdffilereader, pdffilewriter
#拆分乙個pdf文件,提取其中特定的頁數,input為輸入檔案的路徑,out為輸出
def split_pdf(input,out):
pdf_open = open(input, 'rb')
read_pdf = pdffilereader(pdf_open)
n1 = read_pdf.getnumpages() # 計算此pdf檔案中的頁數
print("文件共有%s頁"%n1)
writer = pdffilewriter()
start=1 #起始頁數
end=10 #終止頁數 可修改為自己想要的
#page1 = read_pdf.getpage(0) ##首頁下標為0
#page1.extracttext()
#print(page1)
for i in range(start,end):
writer.addpage(read_pdf.getpage(i))
pdf_write = open(out, "wb")
writer.write(pdf_write)
pdf_open.close()
pdf_write.close()
print("切分完畢!提取源文件第{}-{}頁".format(start,end))
#合併兩個pdf文件,input2加在input1後面
def merge(input1,input2,out):
pdf_open1 = open(input1, 'rb')
pdf_open2 = open(input2, 'rb')
read_pdf1 = pdffilereader(pdf_open1)
read_pdf2 = pdffilereader(pdf_open2)
n1 = read_pdf1.getnumpages() # 計算此pdf檔案中的頁數
n2 = read_pdf2.getnumpages() # 計算此pdf檔案中的頁數
writer = pdffilewriter()
for i in range(n1):
writer.addpage(read_pdf1.getpage(i))
for j in range(n2):
writer.addpage(read_pdf2.getpage(j))
writer.encrypt("666666") #為pdf設定密碼
pdf_write = open(out, "wb")
writer.write(pdf_write)
pdf_open1.close()
pdf_open2.close()
pdf_write.close()
if __name__ == '__main__':
split_pdf('test.pdf','out.pdf')
#merge('1.pdf','2.pdf','result.pdf')
本人在除錯程式中還是遇到了一些小問題,如下圖所示:
網上查了下,是編碼問題,定位到對應的utils.py檔案
原始檔如下:
修改為:
重新執行,問題解決!不得不說,python真的很強大!
PDF分析文字(1)利用python對PDF的讀取
1,安裝第三方庫檔案 pdfminer3k。安裝方式 pip install pdfminer3k 中文參考文件 3,資料獲取思路 1 通過pdf轉html,再利用爬蟲技術解決,目前來說這方面的技術比較成熟,而且參考很多。2 通過pdf轉為txt格式,再通過字元提取的方式處理。這樣的方式容易理解。3...
python讀取pdf檔案
pdfplumber是乙個可以處理pdf格式資訊的庫。可以查詢關於每個文字字元 矩陣 和行的詳細資訊,也可以對 進行提取並進行視覺化除錯。文件參考 安裝直接採用pip即可。命令列中輸入 pip install pdfplumber import pdfplumber with pdfplumber....
python 合併pdf檔案
coding utf 8 import os from pypdf2 import pdffilereader,pdffilewriter import time def getfilename filedir file list os.path.join root,filespath for ro...