import os import fitz import shutil import os,time import fitz from tkinter import filedialog import tkinter as tk from docx import Document from docxcompose.composer import Composer import win32com.client as win32 def covert2pic(file_path, zoom, png_path): #此函數(shù)用于把pdf文件導出成圖片,并保存到對應(yīng)文件夾下 doc = fitz.open(file_path) total = doc.page_count for pg in range(total): page = doc[pg] zoom = int(zoom) # 值越大,分辨率越高,文件越清晰 rotate = int(0) trans = fitz.Matrix(zoom / 100.0, zoom / 100.0).prerotate(rotate) pm = page.get_pixmap(matrix=trans, alpha=False) if not os.path.exists(png_path): os.mkdir(png_path) save = os.path.join(png_path, '%s.png' %(pg+1)) pm.save(save) doc.close() def PCLPDFWJ(Pdf_file_path): if Pdf_file_path=='': print("你輸入空目錄") else: desktop_path = os.path.expanduser("~\Desktop") # 獲取當前桌面路徑 # ----讀取文件夾下所有文件的名字并把他們用列表存起來------ datanames = os.listdir(Pdf_file_path) list_Pdfname = [] for i in datanames: # 獲取文件名稱中日期 list_Pdfname.append(i) # ----------------------------------------------- for j in list_Pdfname: s = j # 獲取文件夾中PDF名稱 pdfPath = Pdf_file_path + "\\" + s print(pdfPath) j = j[:-4] # 去掉最后4個字符.pdf imagePath = desktop_path + "\\" + "臨時文件夾" + "\\" + j # 批量創(chuàng)建imagePath文件夾---------------------------------------------------- if not os.path.exists(imagePath): os.makedirs(imagePath) else: # 清理歷史遺留處理過的文件夾內(nèi)容 shutil.rmtree(imagePath) os.makedirs(imagePath) covert2pic(pdfPath, 200, imagePath) folder_path = imagePath #獲取圖片數(shù)量 file_count = len([f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]) #獲取圖片數(shù)量 #print(file_count) # 創(chuàng)建新的Word文檔對象 document = Document() # 獲取指定文件夾路徑 folder_path = imagePath ysnb=1 #頁數(shù)從第一頁開始插入 # 遍歷文件夾中的每張圖片并插入到Word文檔中 #for filename in os.listdir(folder_path): while ysnb<=int(file_count): filename=str(ysnb)+"."+"png" #獲取轉(zhuǎn)化后的臨時文件夾中對應(yīng)圖片文件夾中的圖片名稱 image_path = os.path.join(folder_path, filename) # 在當前光標位置插入圖片 document.add_picture(image_path) ysnb=ysnb+1 document.save(desktop_path + "\\" + "wordoutput" + "\\" + j + ".docx") # 保存Word文檔 # print(hb) def qinglilingshiwenj(): #清理之前生成的臨時文件夾,避免出錯 desktop_path = os.path.expanduser("~\Desktop") #獲取當前桌面路徑 print("當前桌面路徑:", desktop_path) # 在當前操作系統(tǒng)桌面上創(chuàng)建wordoutput文件夾------------------------------------ if not os.path.exists(desktop_path + "\\" + "wordoutput"): os.makedirs(desktop_path + "\\" + "wordoutput") else: # 清理歷史遺留處理過的文件夾內(nèi)容 shutil.rmtree(desktop_path + "\\" + "wordoutput") os.makedirs(desktop_path + "\\" + "wordoutput") # ---------把圖片插入word文件中--------------------------- # 在當前操作系統(tǒng)桌面上創(chuàng)建wordoutput文件夾----------------------------------------- if not os.path.exists(desktop_path + "\\" + "臨時文件夾"): os.makedirs(desktop_path + "\\" + "臨時文件夾") else: # 清理歷史遺留處理過的文件夾內(nèi)容 shutil.rmtree(desktop_path + "\\" + "臨時文件夾") os.makedirs(desktop_path + "\\" + "臨時文件夾") #-------------------------------------------------------------------------------- #----------此函數(shù)用于合并wordoutput文件夾中所有word成為一個word文件,合并文件輸出在桌面------ def hebing_word(): # 獲取要處理的文件夾路徑 folder_path = r"C:\Users\Thinkpad\Desktop\wordoutput" datanames = os.listdir(folder_path) list_wordoutname = [] for i in datanames: # 獲取文件名稱中日期 list_wordoutname.append(folder_path + "\\" + i) print(list_wordoutname) # 以下函數(shù)用于合并指定文件夾中所有word文件 # 創(chuàng)建新的空白Word文檔 merged_doc = Document() def HB_wordwj(files, final_docx): new_document = Document() composer = Composer(new_document) for fn in files: composer.append(Document(fn)) composer.save(final_docx) # 保存合并后的文檔 desktop_path = os.path.expanduser("~\Desktop") # 獲取當前桌面路徑 merged_file_name = desktop_path + "\\" + "合并輸出文件.docx" print(merged_file_name) HB_wordwj(list_wordoutname, merged_file_name) print("已將文件夾中的所有Word文件合并為", merged_file_name) # ------以下程序用于執(zhí)行word中宏程序,用于調(diào)整合并插入的圖片大小--------------------- # 創(chuàng)建 Word 應(yīng)用程序?qū)ο? word = win32.gencache.EnsureDispatch('Word.Application') # 打開文件 doc = word.Documents.Open(merged_file_name) try: # 運行宏 doc.Application.Run("setpicsize") finally: # 關(guān)閉文件并退出 Word 應(yīng)用程序 doc.Close() word.Quit() #----------此函數(shù)用于合并wordoutput文件夾中所有word成為一個word文件,合并文件輸出在桌面------ if __name__ == "__main__": root = tk.Tk() root.withdraw() # 隱藏tkinter的根窗口 folder_path = filedialog.askdirectory() # 將路徑從Unix格式轉(zhuǎn)換為Windows格式 windows_path = folder_path.replace("/", "\\") print("轉(zhuǎn)換后的路徑:", windows_path) pdfPath = windows_path qinglilingshiwenj() #清理之前生成的臨時文件夾,避免出錯 PCLPDFWJ(pdfPath) hebing_word()
文章來源地址http://www.zghlxwxcb.cn/news/detail-802453.html
文章來源:http://www.zghlxwxcb.cn/news/detail-802453.html
到了這里,關(guān)于改進python批量處理pdf文件插入word頁碼亂問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!