Python實現(xiàn)批量word文檔轉(zhuǎn)pdf并統(tǒng)計其頁碼
pypdf2是一個Python模塊,可以用來讀取、寫入和操作PDF文件。要安裝pypdf2模塊,請按照以下步驟操作:
確保你已經(jīng)安裝了Python。你可以在終端或命令提示符中輸入python --version來檢查Python是否已安裝。
pypdf2模塊的安裝:
ModuleNotFoundError: No module named ‘PyPDF2’
安裝完成后,你可以在Python中使用pypdf2模塊來讀取、寫入和操作PDF文件。
例如,要讀取一個PDF文件中的文本內(nèi)容,你可以在Python腳本中導(dǎo)入pypdf2模塊,然后使用PdfFileReader類讀取文件并遍歷每個頁面。下面是一個簡單的示例代碼:
import pypdf2 pdf_file = pypdf2.PdfFileReader('example.pdf') for page_num in range(pdf_file.getNumPages()): page = pdf_file.getPage(page_num) print(page.extractText())
這將打印出PDF文件中的每個頁面的文本內(nèi)容。
注意:
因PyPDF2 版本更新原因,一些類和函數(shù)已經(jīng)過時,想要采用替代函數(shù),例如獲取pdf 頁數(shù) getNumPages 替換為直接使用 len(reader.pages)。
下面是兩個報錯的提示,把函數(shù)替換掉就行
PyPDF2.errors.DeprecationError: PdfFileReader is deprecated and was removed in PyPDF2 3.0.0. Use PdfReader instead.
PyPDF2.errors.DeprecationError: reader.getNumPages is deprecated and was removed in PyPDF2 3.0.0. Use len(reader.pages) instead.
利用Python代碼實現(xiàn)批量word文檔轉(zhuǎn)換成PDF格式
并對轉(zhuǎn)換的文檔,進行頁碼統(tǒng)計,如下(代碼示例)
# -*- coding:utf-8 -*- import os # 導(dǎo)入系統(tǒng)功能模塊 from win32com.client import Dispatch, DispatchEx # 導(dǎo)入pywin32模塊的client包下的函數(shù) from win32com.client import constants # 導(dǎo)入pywin32模塊的client包下的保存COM常量的類 from win32com.client import gencache # 導(dǎo)入pywin32模塊的client包下的gencache函數(shù) from PyPDF2 import PdfReader # 獲取頁碼用 import re # 導(dǎo)入正則表達式模塊 import pythoncom # 導(dǎo)入封裝了OLE自動化API的模塊,該模塊為pywin32的子模塊 '''獲取指定目錄下的文件 filepath:要遍歷的目錄 filelist_out:輸出文件列表 file_ext:文件的擴展名,默認為任何類型的文件 ''' def getfilenames(filepath='',filelist_out=[],file_ext='all'): # 遍歷filepath下的所有文件,包括子目錄下的文件 for fpath, dirs, fs in os.walk(filepath): for f in fs: fi_d = os.path.join(fpath, f) if file_ext == '.doc': # 遍歷Word文檔文件 if os.path.splitext(fi_d)[1] in ['.doc','.docx']: # 判斷是否為Word文件 filelist_out.append(re.sub(r'\\','/',fi_d)) # 添加到路徑列表中 else: if file_ext == 'all': # 要獲取所有文件的情況 filelist_out.append(fi_d) # 將文件路徑添加到路徑列表中 elif os.path.splitext(fi_d)[1] == file_ext: # 要獲取除了Wrod文件以外的文件 filelist_out.append(fi_d) # 將文件路徑添加到路徑列表中 else: pass filelist_out.sort() # 對路徑進行排序 return filelist_out # 返回文件完整路徑列表 # Word轉(zhuǎn)換為PDF(多個文件) def wordtopdf(filelist,targetpath): totalPages = 0 # 記錄總頁碼 valueList = [] try: pythoncom.CoInitialize() # 調(diào)用線程初始化COM庫,解決調(diào)用Word 2007時出現(xiàn)“尚未調(diào)用CoInitialize”錯誤的問題 gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4) # 開始轉(zhuǎn)換 w = Dispatch("Word.Application") for fullfilename in filelist: (filepath,filename) = os.path.split(fullfilename) # 分割文件路徑和文件名,其中,filepath表示文件路徑;filename表示文件名 softfilename = os.path.splitext(filename) # 分割文件名和擴展名 os.chdir(filepath) doc = os.path.abspath(filename) os.chdir(targetpath) pdfname = softfilename[0] + ".pdf" output = os.path.abspath(pdfname) pdf_name = output # 文檔路徑需要為絕對路徑,因為Word啟動后當(dāng)前路徑不是調(diào)用腳本時的當(dāng)前路徑。 try: # 捕捉異常 doc = w.Documents.Open(doc, ReadOnly=1) doc.ExportAsFixedFormat(output, constants.wdExportFormatPDF, \ Item=constants.wdExportDocumentWithMarkup, CreateBookmarks=constants.wdExportCreateHeadingBookmarks) except Exception as e: # 處理異常 print(e) if os.path.isfile(pdf_name): # 判斷文件是否存在 # 獲取頁碼 pages = getPdfPageNum(pdf_name) # 獲取頁碼 valueList.append([fullfilename,str(pages)]) totalPages += pages # 累加頁碼 # os.remove(pdf_name) # 刪除生成的PDF文件 else: print('轉(zhuǎn)換失敗!') return False w.Quit(constants.wdDoNotSaveChanges) # 退出Word應(yīng)用程序 return totalPages,valueList # 返回總頁碼和每個文檔的頁碼 except TypeError as e: print('出錯了!') print(e) return False ''' 功能:統(tǒng)計文檔頁碼 path:文件絕對路徑 ''' def getPdfPageNum(path): with open(path, "rb") as file: doc = PdfReader(file) pagecount = len(doc.pages) return pagecount if __name__ == '__main__': sourcepath = r"C:/Users/Lenovo/Desktop/python代碼示例/word/" # 指定源路徑(Word文檔所在路徑) targetpath = r"C:/Users/Lenovo/Desktop/python代碼示例/pdf/" # 指定目標(biāo)路徑(PDF保存路徑) filelist = getfilenames(sourcepath,[],'.doc') # 獲取Word文檔路徑 valueList = wordtopdf(filelist,targetpath) # 實現(xiàn)將Word文檔批量轉(zhuǎn)換為PDF resultList = valueList[1] # 獲取統(tǒng)計結(jié)果 if valueList: for i in resultList: print(i[0],i[1]) totalPages = str(valueList[0]) # 總頁數(shù) print("合計頁數(shù):",totalPages) else: print("沒有要統(tǒng)計的文件或者統(tǒng)計失?。?)
以上就是Python實現(xiàn)批量word文檔轉(zhuǎn)pdf并統(tǒng)計其頁碼的詳細內(nèi)容,更多關(guān)于Python word轉(zhuǎn)pdf的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python3導(dǎo)入CSV文件的實例(跟Python2有些許的不同)
今天小編就為大家分享一篇Python3導(dǎo)入CSV文件的實例(跟Python2有些許的不同),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python學(xué)習(xí)之字符串函數(shù)使用詳解
Python的友好在于提供了非常好強大的功能函數(shù)模塊,對于字符串的使用,同樣提供許多簡單便捷的字符串函數(shù)。Python 字符串自帶了很多有用的函數(shù),快來跟隨小編學(xué)習(xí)一下這些函數(shù)的應(yīng)用詳解吧2021-12-12