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

Python實現(xiàn)Word批量轉(zhuǎn)PDF的小工具

 更新時間:2025年05月07日 10:11:42   作者:花小姐的春天  
這篇文章主要為大家詳細(xì)介紹了如何使用Python復(fù)刻一個Word批量轉(zhuǎn)PDF的小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下

前兩天在某魚閑逛,本來想找個二手機(jī)械鍵盤,結(jié)果刷著刷著突然看到有人在賣——Word 批量轉(zhuǎn) PDF 小工具,還挺火,價格也不高,但銷量出奇地高,評論里一堆人在夸“好用”、“終于不用一篇篇點了”啥的。

說實話,當(dāng)時我人都愣住了——

這個功能我用 Python 十分鐘能寫完?。?/strong>

然后我又搜了其它小工具,pdf轉(zhuǎn)Word,Word轉(zhuǎn)圖片,Word加水印什么的……好多

好家伙,花姐以前教大家做的辦公自動化小工具原來都能賣錢呀!

那咱今天先復(fù)刻一個Word 批量轉(zhuǎn) PDF 小工具,順便升級點功能,做個更絲滑的版本。

保準(zhǔn)你看完就能自己寫個賣錢去。

思路先擺明:Word 轉(zhuǎn) PDF,其實沒那么復(fù)雜

你別看這功能聽起來挺“高端”的,其實本質(zhì)上干的事就是——

把一堆 Word 文檔用程序打開,然后保存為 PDF 格式。

換句話說,這活本質(zhì)就是個“批處理”。用 Python 來干,簡直再合適不過。

我們需要的工具是 python-docx?NoNoNo——這個庫不支持保存為 PDF。真正的主角其實是:

  • win32com.client:用來操作 Word 應(yīng)用(需要 Windows 系統(tǒng)+裝了 Office)
  • 或者跨平臺一點的玩法,用 LibreOffice + subprocess,不過今天我們先來講講最穩(wěn)最簡單的方式:用 Word 本尊來干活。

上代碼:幾行就能跑起來的 Word 轉(zhuǎn) PDF 腳本

好,開門見山,先上最基礎(chǔ)的版本:

import os
import win32com.client

def word_to_pdf(input_path, output_path):
    word = win32com.client.Dispatch("Word.Application")
    word.Visible = False  # 不彈窗,后臺運(yùn)行
    doc = word.Documents.Open(input_path)
    doc.SaveAs(output_path, FileFormat=17)  # 17 是 PDF 格式
    doc.Close()
    word.Quit()

# 示例用法
word_to_pdf("C:/Users/你的用戶名/Desktop/測試文檔.docx", 
            "C:/Users/你的用戶名/Desktop/測試文檔.pdf")

幾句解釋:

  • Dispatch("Word.Application") 就是打開 Word 應(yīng)用;
  • FileFormat=17 是告訴它“嘿,我要存成 PDF”;
  • 結(jié)尾的 Quit() 很重要,不然 Word 可能會在后臺一直掛著,占資源。
  • 如果你電腦里安裝的是WPS,Dispatch("Word.Application")這里改成Dispatch("kwps.Application"),不然會報錯

是不是很簡單?連我貓都看懂了。

擴(kuò)展:支持批量轉(zhuǎn)換,一次性把一整個文件夾干掉!

很多人痛苦的點是“文檔太多,一個個轉(zhuǎn)太麻煩”。

那好說,我們搞個批量版本,讓它一口氣全轉(zhuǎn)了:

def batch_convert(folder_path):
    word = win32com.client.Dispatch("Word.Application")
    word.Visible = False

    for file in os.listdir(folder_path):
        if file.endswith(".doc") or file.endswith(".docx"):
            doc_path = os.path.join(folder_path, file)
            pdf_path = os.path.splitext(doc_path)[0] + ".pdf"
            try:
                doc = word.Documents.Open(doc_path)
                doc.SaveAs(pdf_path, FileFormat=17)
                doc.Close()
                print(f"? 轉(zhuǎn)換成功:{file}")
            except Exception as e:
                print(f"? 轉(zhuǎn)換失?。簕file},原因:{e}")

    word.Quit()

使用方式:

batch_convert(r"C:\Users\你的用戶名\Desktop\word文件夾")

常見坑點,花姐來幫你避一避

寫得簡單不難,難的是兼容和細(xì)節(jié)。

1. 系統(tǒng)必須是 Windows,而且得裝了 MS Office

這玩意底層其實就是用 COM 調(diào)用了 Word 的功能,所以沒有裝 Word 是用不了的。

2. 文檔里有宏的、被保護(hù)的,可能轉(zhuǎn)不了

有些文檔打開會彈窗提示宏或者密碼,那個得手動改設(shè)置,程序跑不過去。

3. 文件名不要太長、路徑不要有中文/空格

有時候路徑太奇怪,Word 會打不開,轉(zhuǎn)不了,建議統(tǒng)一放到純英文文件夾里。

額外加點料

  • 自動生成時間戳文件夾 + 輸出日志
  • 自動獲取腳本所在目錄下的 Word 文件(不需要用戶手動輸路徑)
  • 判斷電腦里是否裝了 Office(Word)或 WPS,并自動選對的調(diào)用方式
  • 打包售賣

生成時間戳文件夾

def gen_output_folder():
    folder = os.path.dirname(os.path.abspath(__file__))
    timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    output_folder = os.path.join(folder, f"pdf_{timestamp}")
    os.makedirs(output_folder, exist_ok=True)
    return output_folder

自動獲取當(dāng)前腳本目錄下的 Word 文件

這太簡單了:

import os

def get_word_files_from_current_folder():
    folder = os.path.dirname(os.path.abspath(__file__))
    word_files = []
    for file in os.listdir(folder):
        if file.endswith(".doc") or file.endswith(".docx"):
            word_files.append(os.path.join(folder, file))
    return word_files

檢測 Office 和 WPS 的方法

我們可以嘗試用 win32com.client.gencache.EnsureDispatch() 去判斷這兩個程序是否存在。

import win32com.client

def detect_office_or_wps():
    try:
        word = win32com.client.gencache.EnsureDispatch("Word.Application")
        return "office"
    except:
        try:
            wps = win32com.client.gencache.EnsureDispatch("Kwps.Application")
            return "wps"
        except:
            return None

自動選擇引擎并批量轉(zhuǎn)換

import os
import win32com.client

def convert_word_to_pdf_auto(input_path, output_path, engine):
    if engine == "office":
        app = win32com.client.Dispatch("Word.Application")
    elif engine == "wps":
        app = win32com.client.Dispatch("Kwps.Application")
    else:
        print("? 沒有檢測到可用的 Office 或 WPS")
        return

    app.Visible = False

    try:
        doc = app.Documents.Open(input_path)
        doc.SaveAs(output_path, FileFormat=17)
        doc.Close()
        print(f"? 轉(zhuǎn)換成功:{input_path}")
    except Exception as e:
        print(f"? 轉(zhuǎn)換失?。簕input_path},原因:{e}")

    try:
        app.Quit()
    except:
        print("?? 當(dāng)前環(huán)境不支持 Quit,跳過退出。")

整合所有內(nèi)容,一鍵搞定腳本所在目錄下的所有 Word 文件

def batch_convert_here():
    engine = detect_office_or_wps()
    if not engine:
        print("?? 系統(tǒng)里沒有安裝 Office 或 WPS,沒法轉(zhuǎn)換")
        return

    folder = os.path.dirname(os.path.abspath(__file__))
    word_files = get_word_files_from_current_folder()

    if not word_files:
        print("???♀? 當(dāng)前文件夾沒有發(fā)現(xiàn) Word 文件")
        return

    output_folder = os.path.join(folder, "pdf輸出")
    os.makedirs(output_folder, exist_ok=True)

    for word_file in word_files:
        filename = os.path.splitext(os.path.basename(word_file))[0]
        pdf_path = os.path.join(output_folder, f"{filename}.pdf")
        convert_word_to_pdf_auto(word_file, pdf_path, engine)

    print("?? 所有文件轉(zhuǎn)換完成啦!PDF 都在 'pdf輸出' 文件夾里")

運(yùn)行方式(放在腳本結(jié)尾):

if __name__ == "__main__":
    batch_convert_here()

做成 EXE 給小白用戶用(pyinstaller)

最后一步,把咱的腳本打包成 .exe,丟到某魚賣錢(手動狗頭)

命令就一句話:

pyinstaller -F word2pdf.py

完整代碼

import os
import win32com.client
import sys
import datetime

def get_real_path():
    """兼容開發(fā)與打包環(huán)境的路徑獲取"""
    if getattr(sys, 'frozen', False):
        base_dir = os.path.dirname(sys.executable)  # EXE文件所在目錄[1,7](@ref)
    else:
        base_dir = os.path.dirname(os.path.abspath(__file__))
        
    return base_dir

# 生成時間戳文件夾
def gen_output_folder(folder):
    # folder = os.path.dirname(os.path.abspath(__file__))
    timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    output_folder = os.path.join(folder, f"pdf_{timestamp}")
    os.makedirs(output_folder, exist_ok=True)
    return output_folder
    
# 自動獲取當(dāng)前腳本目錄下的 Word 文件
def get_word_files_from_current_folder(folder):
    # folder = os.path.dirname(os.path.abspath(__file__))
    word_files = []
    for file in os.listdir(folder):
        if file.endswith(".doc") or file.endswith(".docx"):
            word_files.append(os.path.join(folder, file))
    return word_files

# 檢測 Office 和 WPS 的方法
def detect_office_or_wps():
    try:
        word = win32com.client.gencache.EnsureDispatch("Word.Application")
        return "office"
    except:
        try:
            wps = win32com.client.gencache.EnsureDispatch("Kwps.Application")
            return "wps"
        except:
            return None

# 自動選擇引擎并批量轉(zhuǎn)換
def convert_word_to_pdf_auto(input_path, output_path, engine):
    if engine == "office":
        app = win32com.client.Dispatch("Word.Application")
    elif engine == "wps":
        app = win32com.client.Dispatch("Kwps.Application")
    else:
        print("沒有檢測到可用的 Office 或 WPS")
        return

    app.Visible = False

    try:
        doc = app.Documents.Open(input_path)
        doc.SaveAs(output_path, FileFormat=17)
        doc.Close()
        print(f"轉(zhuǎn)換成功:{input_path}")
    except Exception as e:
        print(f"轉(zhuǎn)換失?。簕input_path},原因:{e}")

    try:
        app.Quit()
    except:
        print("當(dāng)前環(huán)境不支持 Quit,跳過退出。")

# 主函數(shù)  
def batch_convert_here():
    engine = detect_office_or_wps()
    if not engine:
        print("系統(tǒng)里沒有安裝 Office 或 WPS,沒法轉(zhuǎn)換")
        return

    folder = get_real_path()
    word_files = get_word_files_from_current_folder(folder)
    

    if not word_files:
        print("當(dāng)前文件夾沒有發(fā)現(xiàn) Word 文件")
        return

    output_folder = gen_output_folder(folder)

    for word_file in word_files:
        filename = os.path.splitext(os.path.basename(word_file))[0]
        pdf_path = os.path.join(output_folder, f"{filename}.pdf")
        convert_word_to_pdf_auto(word_file, pdf_path, engine)

    print("所有文件轉(zhuǎn)換完成啦!PDF 都在 'output_folder' 文件夾里")
    
if __name__ == "__main__":
    try:
        batch_convert_here()
        print("按 Enter 鍵退出...")
        input()  # 等待用戶按 Enter 鍵
    except Exception as e:
        print(e)
        print("程序運(yùn)行錯誤,按 Enter 鍵退出...")
        input()  # 等待用戶按 Enter 鍵

你可能覺得:“這不就是幾十行代碼嘛,賣這個會有人買嗎?”

我一開始也這么想。后來我想通了,某魚上很多買家,根本不懂技術(shù),他們在意的是:

  • 能不能一鍵搞定?
  • 會不會太復(fù)雜?
  • 省不省事?

所以啊,寫工具 + 提供說明 + 包裝打包,這些就構(gòu)成了“產(chǎn)品”。

我們程序員有時候太低估自己的能力了——其實你隨手寫的腳本,真的能解決很多人的問題。

到此這篇關(guān)于Python實現(xiàn)Word批量轉(zhuǎn)PDF的小工具的文章就介紹到這了,更多相關(guān)Python Word批量轉(zhuǎn)PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用OpenCV對圖像進(jìn)行縮放功能

    Python使用OpenCV對圖像進(jìn)行縮放功能

    這篇文章主要介紹了Python使用OpenCV對圖像進(jìn)行縮放功能,文中給大家提到了兩種調(diào)用方式及OpenCV中pryUp和pryDown的用法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 利用pyproj將經(jīng)緯度投影為平面坐標(biāo)以及地理坐標(biāo)系背景知識解讀

    利用pyproj將經(jīng)緯度投影為平面坐標(biāo)以及地理坐標(biāo)系背景知識解讀

    這篇文章主要介紹了利用pyproj將經(jīng)緯度投影為平面坐標(biāo)以及地理坐標(biāo)系背景知識解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 深入理解Python 代碼優(yōu)化詳解

    深入理解Python 代碼優(yōu)化詳解

    本文初步探討了 python 常見的性能優(yōu)化技巧以及如何借助工具來定位和分析程序的性能瓶頸,并提供了相關(guān)可以進(jìn)行性能優(yōu)化的工具或語言,希望能夠更相關(guān)人員一些參考。
    2014-10-10
  • python實現(xiàn)excel讀寫數(shù)據(jù)

    python實現(xiàn)excel讀寫數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了python操作EXCEL讀數(shù)據(jù)、寫數(shù)據(jù)的實例源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • np.where()[0] 和 np.where()[1]的具體使用

    np.where()[0] 和 np.where()[1]的具體使用

    這篇文章主要介紹了np.where()[0] 和 np.where()[1]的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • PyTorch深度學(xué)習(xí)LSTM從input輸入到Linear輸出

    PyTorch深度學(xué)習(xí)LSTM從input輸入到Linear輸出

    這篇文章主要為大家介紹了PyTorch深度學(xué)習(xí)LSTM從input輸入到Linear輸出深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • python中rb含義理解

    python中rb含義理解

    在本篇文章里小編給大家整理的是關(guān)于python中rb含義及用法內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • python Zmail模塊簡介與使用示例

    python Zmail模塊簡介與使用示例

    這篇文章主要介紹了python Zmail模塊簡介與使用示例,幫助大家利用python收發(fā)郵件,感興趣的朋友可以了解下
    2020-12-12
  • Tensorflow之MNIST CNN實現(xiàn)并保存、加載模型

    Tensorflow之MNIST CNN實現(xiàn)并保存、加載模型

    這篇文章主要為大家詳細(xì)介紹了Tensorflow之MNIST CNN實現(xiàn)并保存、加載模型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 2021年pycharm的最新安裝教程及基本使用圖文詳解

    2021年pycharm的最新安裝教程及基本使用圖文詳解

    這篇文章主要介紹了2021年pycharm的最新安裝教程及基本使用,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論

石狮市| 绥滨县| 清涧县| 芷江| 金川县| 镇坪县| 微博| 扎鲁特旗| 长垣县| 台湾省| 大宁县| 云安县| 花莲市| 柏乡县| 呼玛县| 元阳县| 勃利县| 衡东县| 海丰县| 绵阳市| 修文县| 扎兰屯市| 锡林郭勒盟| 吴旗县| 界首市| 铁力市| 柏乡县| 米泉市| 水城县| 永丰县| 磐安县| 苍山县| 义乌市| 伽师县| 湛江市| 慈溪市| 德清县| 湄潭县| 岫岩| 永和县| 津市市|