最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python批量轉(zhuǎn)換word文檔為pdf文件的示例代碼

 更新時間:2025年12月18日 09:27:07   作者:睿思達(dá)DBA_WGX  
這篇文章主要為大家詳細(xì)介紹了如何使用python編寫一個批量轉(zhuǎn)換word文檔為pdf文件的工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

一、安裝 python-docx 和 comtypes 庫

windows命令行窗口執(zhí)行如下代碼:

pip install python-docx
pip install comtypes

C:\Users\wgx58>pip install python-docx
Collecting python-docx
  Using cached python_docx-1.2.0-py3-none-any.whl.metadata (2.0 kB)
Requirement already satisfied: lxml>=3.1.0 in c:\python\lib\site-packages (from python-docx) (6.0.2)
Requirement already satisfied: typing_extensions>=4.9.0 in c:\python\lib\site-packages (from python-docx) (4.15.0)
Using cached python_docx-1.2.0-py3-none-any.whl (252 kB)
Installing collected packages: python-docx
Successfully installed python-docx-1.2.0

C:\Users\wgx58>pip install comtypes
Collecting comtypes
  Downloading comtypes-1.4.12-py3-none-any.whl.metadata (7.3 kB)
Downloading comtypes-1.4.12-py3-none-any.whl (253 kB)
Installing collected packages: comtypes
Successfully installed comtypes-1.4.12

二、程序代碼

import os
import comtypes.client
from pathlib import Path
import tkinter as tk
from tkinter import filedialog, messagebox
import threading


class WordToPDFConverter:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("Word轉(zhuǎn)PDF批量轉(zhuǎn)換器")
        self.root.geometry("500x400")

        self.setup_ui()

    def setup_ui(self):
        """設(shè)置用戶界面"""
        # 標(biāo)題
        title_label = tk.Label(self.root, text="Word轉(zhuǎn)PDF批量轉(zhuǎn)換器",
                               font=("Arial", 16, "bold"))
        title_label.pack(pady=20)

        # 選擇文件夾按鈕
        self.select_btn = tk.Button(self.root, text="選擇Word文檔文件夾",
                                    command=self.select_folder,
                                    font=("Arial", 12), bg="#4CAF50", fg="white")
        self.select_btn.pack(pady=10)

        # 顯示選擇的文件夾
        self.folder_label = tk.Label(self.root, text="未選擇文件夾",
                                     font=("Arial", 10), wraplength=400)
        self.folder_label.pack(pady=5)

        # 輸出文件夾選擇
        self.output_btn = tk.Button(self.root, text="選擇PDF輸出文件夾",
                                    command=self.select_output_folder,
                                    font=("Arial", 12), bg="#2196F3", fg="white")
        self.output_btn.pack(pady=10)

        self.output_label = tk.Label(self.root, text="未選擇輸出文件夾",
                                     font=("Arial", 10), wraplength=400)
        self.output_label.pack(pady=5)

        # 轉(zhuǎn)換按鈕
        self.convert_btn = tk.Button(self.root, text="開始轉(zhuǎn)換",
                                     command=self.start_conversion,
                                     font=("Arial", 14), bg="#FF9800", fg="white",
                                     state="disabled")
        self.convert_btn.pack(pady=20)

        # 進度顯示
        self.progress_label = tk.Label(self.root, text="", font=("Arial", 10))
        self.progress_label.pack(pady=5)

        # 日志文本框
        self.log_text = tk.Text(self.root, height=10, width=60)
        self.log_text.pack(pady=10, padx=20, fill=tk.BOTH, expand=True)

        # 滾動條
        scrollbar = tk.Scrollbar(self.log_text)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        self.log_text.config(yscrollcommand=scrollbar.set)
        scrollbar.config(command=self.log_text.yview)

        self.input_folder = ""
        self.output_folder = ""

    def log_message(self, message):
        """添加日志消息"""
        self.log_text.insert(tk.END, f"{message}\n")
        self.log_text.see(tk.END)
        self.root.update()

    def select_folder(self):
        """選擇包含Word文檔的文件夾"""
        folder = filedialog.askdirectory(title="選擇包含Word文檔的文件夾")
        if folder:
            self.input_folder = folder
            self.folder_label.config(text=f"已選擇: {folder}")
            self.check_ready()

    def select_output_folder(self):
        """選擇PDF輸出文件夾"""
        folder = filedialog.askdirectory(title="選擇PDF輸出文件夾")
        if folder:
            self.output_folder = folder
            self.output_label.config(text=f"已選擇: {folder}")
            self.check_ready()

    def check_ready(self):
        """檢查是否準(zhǔn)備好轉(zhuǎn)換"""
        if self.input_folder and self.output_folder:
            self.convert_btn.config(state="normal")

    def start_conversion(self):
        """開始轉(zhuǎn)換過程"""
        self.convert_btn.config(state="disabled")
        thread = threading.Thread(target=self.convert_word_to_pdf)
        thread.daemon = True
        thread.start()

    def convert_word_to_pdf(self):
        """執(zhí)行Word到PDF的轉(zhuǎn)換"""
        try:
            self.log_message("開始掃描Word文檔...")

            # 支持的Word文檔擴展名
            word_extensions = ['.doc', '.docx', '.docm']
            word_files = []

            # 遞歸查找所有Word文檔
            for root, dirs, files in os.walk(self.input_folder):
                for file in files:
                    if any(file.lower().endswith(ext) for ext in word_extensions):
                        word_files.append(os.path.join(root, file))

            if not word_files:
                self.log_message("未找到任何Word文檔!")
                self.convert_btn.config(state="normal")
                return

            self.log_message(f"找到 {len(word_files)} 個Word文檔")
            self.log_message("開始轉(zhuǎn)換...")

            success_count = 0
            error_count = 0

            # 初始化Word應(yīng)用程序
            word_app = comtypes.client.CreateObject('Word.Application')
            word_app.Visible = False

            for i, word_file in enumerate(word_files, 1):
                try:
                    # 更新進度
                    self.progress_label.config(text=f"處理中: {i}/{len(word_files)}")

                    # 構(gòu)建輸出路徑
                    relative_path = os.path.relpath(word_file, self.input_folder)
                    pdf_filename = os.path.splitext(relative_path)[0] + '.pdf'
                    pdf_path = os.path.join(self.output_folder, pdf_filename)

                    # 確保輸出目錄存在
                    os.makedirs(os.path.dirname(pdf_path), exist_ok=True)

                    # 轉(zhuǎn)換文檔
                    doc = word_app.Documents.Open(word_file)
                    doc.SaveAs(pdf_path, FileFormat=17)  # 17代表PDF格式
                    doc.Close()

                    self.log_message(f"? 成功轉(zhuǎn)換: {os.path.basename(word_file)}")
                    success_count += 1

                except Exception as e:
                    self.log_message(f"? 轉(zhuǎn)換失敗: {os.path.basename(word_file)} - {str(e)}")
                    error_count += 1

            # 關(guān)閉Word應(yīng)用程序
            word_app.Quit()

            # 顯示結(jié)果
            self.progress_label.config(text="")
            self.log_message(f"\n轉(zhuǎn)換完成!")
            self.log_message(f"成功: {success_count} 個文件")
            self.log_message(f"失敗: {error_count} 個文件")

            messagebox.showinfo("轉(zhuǎn)換完成",
                                f"轉(zhuǎn)換完成!\n成功: {success_count} 個文件\n失敗: {error_count} 個文件")

        except Exception as e:
            self.log_message(f"轉(zhuǎn)換過程中發(fā)生錯誤: {str(e)}")
            messagebox.showerror("錯誤", f"轉(zhuǎn)換過程中發(fā)生錯誤: {str(e)}")
        finally:
            self.convert_btn.config(state="normal")


def main():
    """主函數(shù)"""
    converter = WordToPDFConverter()
    converter.root.mainloop()


if __name__ == "__main__":
    main()

三、執(zhí)行程序

執(zhí)行程序后彈出如下窗口,單擊【選擇Word文檔文件夾】選擇word文檔所在的文件夾,單擊【選擇PDF輸出文件夾】選擇存放pdf文檔的文件夾,然后單擊【開始轉(zhuǎn)換】即可:

四、程序特點

1、圖形界面

(1)直觀的GUI界面

(2)實時進度顯示

(3)詳細(xì)的日志記錄

(4)支持文件夾選擇

2、功能特性

(1)支持多種Word格式(.doc, .docx, .docm)

(2)保持原有文件夾結(jié)構(gòu)

(3)錯誤處理和日志記錄

到此這篇關(guān)于python批量轉(zhuǎn)換word文檔為pdf文件的示例代碼的文章就介紹到這了,更多相關(guān)python批量轉(zhuǎn)換word和pdf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 調(diào)用 zabbix api的方法示例

    Python 調(diào)用 zabbix api的方法示例

    這篇文章主要介紹了Python 調(diào)用 zabbix api的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • python獲取Linux發(fā)行版名稱

    python獲取Linux發(fā)行版名稱

    這篇文章主要介紹了python獲取Linux發(fā)行版名稱的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Python匹配中文的正則表達(dá)式

    Python匹配中文的正則表達(dá)式

    正則表達(dá)式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配。接下來通過本文給大家介紹Python匹配中文的正則表達(dá)式,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • Python遍歷numpy數(shù)組的實例

    Python遍歷numpy數(shù)組的實例

    下面小編就為大家分享一篇Python遍歷numpy數(shù)組的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python登錄系統(tǒng)界面實現(xiàn)詳解

    Python登錄系統(tǒng)界面實現(xiàn)詳解

    這篇文章主要介紹了Python登錄系統(tǒng)界面實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2019-06-06
  • Python中字符編碼簡介、方法及使用建議

    Python中字符編碼簡介、方法及使用建議

    這篇文章主要介紹了Python中字符編碼簡介、方法及使用建議,需要的朋友可以參考下
    2015-01-01
  • 基于Python實現(xiàn)RLE格式分割標(biāo)注文件的格式轉(zhuǎn)換

    基于Python實現(xiàn)RLE格式分割標(biāo)注文件的格式轉(zhuǎn)換

    本文將以Airbus Ship Detection Challenge為例,為大家詳細(xì)講解Python實現(xiàn)RLE格式分割標(biāo)注文件格式轉(zhuǎn)換的方法,感興趣的可以了解一下
    2022-08-08
  • python如何查找圖片按鈕的坐標(biāo)位置

    python如何查找圖片按鈕的坐標(biāo)位置

    這篇文章主要介紹了python如何查找圖片按鈕的坐標(biāo)位置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python 等差數(shù)列末項計算方式

    python 等差數(shù)列末項計算方式

    這篇文章主要介紹了python 等差數(shù)列末項計算方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • pycharm配置python環(huán)境的詳細(xì)圖文教程

    pycharm配置python環(huán)境的詳細(xì)圖文教程

    PyCharm是一款功能強大的Python編輯器,具有跨平臺性,下面這篇文章主要給大家介紹了關(guān)于pycharm配置python環(huán)境的詳細(xì)圖文教程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01

最新評論

玛沁县| 沙田区| 鄂尔多斯市| 凤城市| 海安县| 依兰县| 密山市| 禄劝| 宁陕县| 普安县| 宜宾市| 会同县| 湖州市| 通州市| 迭部县| 长宁县| 肇东市| 措勤县| 栾川县| 高平市| 布拖县| 瑞安市| 怀安县| 韶关市| 宜兰县| 宁阳县| 紫阳县| 芜湖市| 贵港市| 宣武区| 偃师市| 平利县| 绥化市| 桂阳县| 富宁县| 海林市| 祁东县| 白玉县| 漾濞| 灵丘县| 溧阳市|