1. 程式人生 > 程式設計 >Python利用PyPDF2庫獲取PDF檔案總頁碼例項

Python利用PyPDF2庫獲取PDF檔案總頁碼例項

Python中可以利用PyPDF2庫來獲取該pdf檔案的總頁碼,可以根據下面的方法一步步進行下去:

1、首先,要安裝PyPDF2庫,利用以下命令即可:

pip install PyPDF2

2、接著,就是直接編寫程式碼了,其中我新建了一個py檔案,名為file_utils.py,程式碼如下:

from PyPDF2 import PdfFileReader
 
def get_num_pages(file_path):
 """
 獲取檔案總頁碼
 :param file_path: 檔案路徑
 :return:
 """
 reader = PdfFileReader(file_path)
 # 不解密可能會報錯:PyPDF2.utils.PdfReadError: File has not been decrypted
 if reader.isEncrypted:
  reader.decrypt('')
 page_num = reader.getNumPages()
 return page_num

3、這樣就可以獲得該pdf檔案的總頁數了,但是需要傳遞檔案路徑進去,因為需要讀取這個檔案。

4、以上內容僅供學習參考,謝謝!

補充知識:使用python合併pdf檔案帶書籤

1、需求:

將幾本紙質書進行了掃描,可是掃描的每頁生成一個pdf檔案。需要怎麼才能把這些pdf檔案合成一個呢?adoba acrobat工具支援,可是收費。我們平時用的都是adoba reader,只有讀pdf的功能沒有合併等高階功能。網上的一些免費工具又擔心有病毒或繫結程式。

所以考慮看看pyton實現。網上找了下python合併pdf的指令碼,發現也沒有新增書籤的功能的,有新增書籤的也不是很靈活。

所有對網上找的一個python程式進行了升級,可以實現合併pdf並每個章節加入書籤。

檔案準備:

先將掃描的pdf檔案,每一章放到一個資料夾中,資料夾名字用章節名命名。這樣最終程式就能將章節名作為書籤了,而不是預設將每頁都生成書籤。

Python利用PyPDF2庫獲取PDF檔案總頁碼例項

2、程式程式碼

程式碼執行環境:python3

需要安裝PyPDF2包:pip install PyPDF2

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
 本指令碼用來合併pdf檔案,支援帶一級子目錄的
 每章內容分別放在不同的目錄下,目錄名為章節名
 最終生成的pdf,按章節名生成書籤
'''

import os,sys,codecs
from PyPDF2 import PdfFileReader,PdfFileWriter,PdfFileMerger
import glob

def getFileName(filepath):
 '''
  獲取當前目錄下的所有pdf檔案
 '''
 file_list = glob.glob(filepath+"/*.pdf")
 # 預設安裝字典序排序,也可以安裝自定義的方式排序
 # file_list.sort()
 return file_list


def get_dirs(filepath='',dirlist_out=[],dirpathlist_out=[]):
 # 遍歷filepath下的所有目錄
 for dir in os.listdir(filepath):
  dirpathlist_out.append(filepath + '\\' + dir)

 return dirpathlist_out


def merge_childdir_files(path):
 '''
  每個子目錄下合併生成一個pdf
 '''
 dirpathlist = get_dirs(path)
 if len(dirpathlist) == 0:
  print("當前目錄不存在子目錄")
  sys.exit()
 for dir in dirpathlist:
  mergefiles(dir,dir)


def mergefiles(path,output_filename,import_bookmarks=False):
 # 遍歷目錄下的所有pdf將其合併輸出到一個pdf檔案中,輸出的pdf檔案預設帶書籤,書籤名為之前的檔名
 # 預設情況下原始檔案的書籤不會匯入,使用import_bookmarks=True可以將原檔案所帶的書籤也匯入到輸出的pdf檔案中
 merger = PdfFileMerger()
 filelist = getFileName(path)
 if len(filelist) == 0:
  print("當前目錄及子目錄下不存在pdf檔案")
  sys.exit()
 for filename in filelist:
  f = codecs.open(filename,'rb')
  file_rd = PdfFileReader(f)
  short_filename = os.path.basename(os.path.splitext(filename)[0])
  if file_rd.isEncrypted == True:
   print('不支援的加密檔案:%s'%(filename))
   continue
  merger.append(file_rd,bookmark=short_filename,import_bookmarks=import_bookmarks)
  print('合併檔案:%s'%(filename))
  f.close()
 # out_filename = os.path.join(os.path.abspath(path),output_filename)
 merger.write(output_filename + ".pdf")
 print('合併後的輸出檔案:%s'%(output_filename))
 merger.close()

if __name__ == "__main__":
 # 每個章節一個子目錄,先分別合併每個子目錄檔案為一個pdf,然後再將這些pdf合併為一個大的pdf,這樣做目的是想生成每個章節的書籤

 # 1.指定目錄
 # 原始pdf所在目錄
 path = "D:\spdf"
 # 輸出pdf路徑和檔名
 output_filename = "D:\spdf\戰略規劃 公司實現持續成功的方法、工具和實踐 羅熙昶 2018-09"

 # 2.生成子目錄的pdf
 # merge_childdir_files(path)

 # 3.子目錄pdf合併為總的pdf
 mergefiles(path,output_filename)

3、程式使用

將要生成的pdf檔案目錄匯入到程式指定目錄下,例如我程式中的path是“D:\spdf”,然後指定最終輸出的檔案路徑及檔名,我上面的output_filename是"D:\spdf\戰略規劃 公司實現持續成功的方法、工具和實踐 羅熙昶 2018-09"

資料結果如下:

Python利用PyPDF2庫獲取PDF檔案總頁碼例項

以上這篇Python利用PyPDF2庫獲取PDF檔案總頁碼例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。