Python實(shí)現(xiàn)批量word文檔轉(zhuǎn)pdf并統(tǒng)計(jì)其頁碼
pypdf2是一個(gè)Python模塊,可以用來讀取、寫入和操作PDF文件。要安裝pypdf2模塊,請按照以下步驟操作:
確保你已經(jīng)安裝了Python。你可以在終端或命令提示符中輸入python --version來檢查Python是否已安裝。
pypdf2模塊的安裝:
ModuleNotFoundError: No module named ‘PyPDF2’

安裝完成后,你可以在Python中使用pypdf2模塊來讀取、寫入和操作PDF文件。
例如,要讀取一個(gè)PDF文件中的文本內(nèi)容,你可以在Python腳本中導(dǎo)入pypdf2模塊,然后使用PdfFileReader類讀取文件并遍歷每個(gè)頁面。下面是一個(gè)簡單的示例代碼:
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文件中的每個(gè)頁面的文本內(nèi)容。
注意:
因PyPDF2 版本更新原因,一些類和函數(shù)已經(jīng)過時(shí),想要采用替代函數(shù),例如獲取pdf 頁數(shù) getNumPages 替換為直接使用 len(reader.pages)。
下面是兩個(gè)報(bào)錯的提示,把函數(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代碼實(shí)現(xiàn)批量word文檔轉(zhuǎn)換成PDF格式
并對轉(zhuǎn)換的文檔,進(jìn)行頁碼統(tǒng)計(jì),如下(代碼示例)
# -*- 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)入正則表達(dá)式模塊
import pythoncom # 導(dǎo)入封裝了OLE自動化API的模塊,該模塊為pywin32的子模塊
'''獲取指定目錄下的文件
filepath:要遍歷的目錄
filelist_out:輸出文件列表
file_ext:文件的擴(kuò)展名,默認(rèn)為任何類型的文件
'''
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() # 對路徑進(jìn)行排序
return filelist_out # 返回文件完整路徑列表
# Word轉(zhuǎn)換為PDF(多個(gè)文件)
def wordtopdf(filelist,targetpath):
totalPages = 0 # 記錄總頁碼
valueList = []
try:
pythoncom.CoInitialize() # 調(diào)用線程初始化COM庫,解決調(diào)用Word 2007時(shí)出現(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) # 分割文件名和擴(kuò)展名
os.chdir(filepath)
doc = os.path.abspath(filename)
os.chdir(targetpath)
pdfname = softfilename[0] + ".pdf"
output = os.path.abspath(pdfname)
pdf_name = output
# 文檔路徑需要為絕對路徑,因?yàn)閃ord啟動后當(dāng)前路徑不是調(diào)用腳本時(shí)的當(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 # 返回總頁碼和每個(gè)文檔的頁碼
except TypeError as e:
print('出錯了!')
print(e)
return False
'''
功能:統(tǒng)計(jì)文檔頁碼
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) # 實(shí)現(xiàn)將Word文檔批量轉(zhuǎn)換為PDF
resultList = valueList[1] # 獲取統(tǒng)計(jì)結(jié)果
if valueList:
for i in resultList:
print(i[0],i[1])
totalPages = str(valueList[0]) # 總頁數(shù)
print("合計(jì)頁數(shù):",totalPages)
else:
print("沒有要統(tǒng)計(jì)的文件或者統(tǒng)計(jì)失?。?)
以上就是Python實(shí)現(xiàn)批量word文檔轉(zhuǎn)pdf并統(tǒng)計(jì)其頁碼的詳細(xì)內(nèi)容,更多關(guān)于Python word轉(zhuǎn)pdf的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python實(shí)現(xiàn)Word批量轉(zhuǎn)PDF的小工具
- Python中PDF轉(zhuǎn)Word的多種實(shí)現(xiàn)方法
- Python將Word文檔轉(zhuǎn)為PDF的兩種方法
- Python將Office文檔(Word、Excel、PDF、PPT)轉(zhuǎn)為OFD格式的實(shí)現(xiàn)方法
- Python實(shí)現(xiàn)PDF轉(zhuǎn)Word的多種方式總結(jié)
- Python實(shí)現(xiàn)批量將word轉(zhuǎn)換成pdf
- 如何利用Python將html轉(zhuǎn)為pdf、word文件
- 使用Python輕松實(shí)現(xiàn)Word批量轉(zhuǎn)換為PDF
相關(guān)文章
Python判斷字符串是否包含特定子字符串的多種方法(7種方法)
我們經(jīng)常會遇這樣一個(gè)需求判斷字符串中是否包含某個(gè)關(guān)鍵詞,也就是特定的子字符串,接下來通過本文給大家分享Python判斷字符串是否包含特定子字符串的多種方法(7種方法),需要的朋友可以參考下2023-03-03
詳解python的webrtc庫實(shí)現(xiàn)語音端點(diǎn)檢測
這篇文章主要介紹了詳解python的webrtc庫實(shí)現(xiàn)語音端點(diǎn)檢測,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
Python3對稱加密算法AES、DES3實(shí)例詳解
這篇文章主要介紹了Python3對稱加密算法AES、DES3,結(jié)合實(shí)例形式詳細(xì)分析了對稱加密算法AES、DES3相關(guān)模塊安裝、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2018-12-12
Python參數(shù)傳遞實(shí)現(xiàn)過程及原理詳解
這篇文章主要介紹了Python參數(shù)傳遞實(shí)現(xiàn)過程及原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
python sorted函數(shù)的小練習(xí)及解答
這篇文章主要介紹了python sorted函數(shù)的小練習(xí)及解答,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
windows下 兼容Python2和Python3的解決方法
這篇文章主要介紹了windows下 兼容Python2和Python3的解決方法,需要的朋友可以參考下2018-12-12
Python實(shí)現(xiàn)定時(shí)任務(wù)調(diào)度器的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)定時(shí)任務(wù)調(diào)度器,用于自動化執(zhí)行各種重復(fù)性任務(wù),文中的示例代碼講解詳細(xì),有需要的可以了解下2025-12-12
Python實(shí)現(xiàn)信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
python作圖基礎(chǔ)之plt.contour實(shí)例詳解
contour和contourf都是畫三維等高線圖的,下面這篇文章主要給大家介紹了關(guān)于python作圖基礎(chǔ)操作之plt.contour的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06

