Python - 批量轉(zhuǎn)換Word文件為PDF文件

1,目的

通過萬能的Python把一個目錄下的所有Word文件轉(zhuǎn)換為PDF文件。

Word to PDF .jpg

2埋酬,遍歷目錄

作者總結(jié)了三種遍歷目錄的方法,分別如下烧栋。

2.1写妥,調(diào)用glob

遍歷指定目錄下的所有文件和文件夾,不遞歸遍歷审姓,需要手動完成遞歸遍歷功能珍特。

import glob as gb
path = gb.glob('d:\\2\\*')
for path in path:
    print path

2.2,調(diào)用os.walk

遍歷指定目錄下的所有文件和文件夾魔吐,遞歸遍歷扎筒,功能強(qiáng)大,推薦使用酬姆。

import os
for dirpath, dirnames, filenames in os.walk('d:\\2\\'):
    for file in filenames:
        fullpath = os.path.join(dirpath, file)
        print fullpath, file

2.3嗜桌,自己DIY

遍歷指定目錄下的所有文件和文件夾,遞歸遍歷辞色,自主編寫骨宠,擴(kuò)展性強(qiáng),可以學(xué)習(xí)練手。

import os;  
files = list();  
def DirAll(pathName):  
    if os.path.exists(pathName):  
        fileList = os.listdir(pathName);  
        for f in fileList:  
            if f=="$RECYCLE.BIN" or f=="System Volume Information":  
                continue;  
            f=os.path.join(pathName,f);  
            if os.path.isdir(f):     
                DirAll(f);                  
            else:  
                dirName=os.path.dirname(f);  
                baseName=os.path.basename(f);  
                if dirName.endswith(os.sep):  
                    files.append(dirName+baseName);  
                else:  
                    files.append(dirName+os.sep+baseName);  
  
DirAll("D:\\2\\");  
for f in files:  
    print f
    # print f.decode('gbk').encode('utf-8');  

2.4层亿,備注

注意壶唤,如果遍歷過程中,出現(xiàn)文件名稱或文件路徑亂碼問題棕所,可以查看本文的參考資料來解決闸盔。

3,轉(zhuǎn)換Word文件為PDF

通過Windows Com組件(win32com)琳省,調(diào)用Word服務(wù)(Word.Application)迎吵,實現(xiàn)Word到PDF文件的轉(zhuǎn)換。因此针贬,要求該P(yáng)ython程序需要在有Word服務(wù)(可能至少要求2007版本)的Windows機(jī)器上運(yùn)行击费。

#coding:utf8

import os, sys
reload(sys)
sys.setdefaultencoding('utf8')

from win32com.client import Dispatch, constants, gencache

input = 'D:\\2\\test\\11.docx'
output = 'D:\\2\\test\\22.pdf'

print 'input file', input
print 'output file', output
# enable python COM support for Word 2007
# this is generated by: makepy.py -i "Microsoft Word 12.0 Object Library"
gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4)
# 開始轉(zhuǎn)換
w = Dispatch("Word.Application")
try:
    doc = w.Documents.Open(input, ReadOnly=1)
    doc.ExportAsFixedFormat(output, constants.wdExportFormatPDF, \
                            Item=constants.wdExportDocumentWithMarkup,
                            CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
except:
    print ' exception'
finally:
    w.Quit(constants.wdDoNotSaveChanges)

if os.path.isfile(output):
    print 'translate success'
else:
    print 'translate fail'

4,批量轉(zhuǎn)換

要實現(xiàn)批量準(zhǔn)換桦他,將第2步和第3步的功能組合在一起即可蔫巩,直接上代碼。

# -*- coding:utf-8 -*-
# doc2pdf.py: python script to convert doc to pdf with bookmarks!
# Requires Office 2007 SP2
# Requires python for win32 extension

import glob as gb
import sys
reload(sys)
sys.setdefaultencoding('utf8')

'''
參考:http://blog.csdn.net/rumswell/article/details/7434302
'''
import sys, os
from win32com.client import Dispatch, constants, gencache

# from config import REPORT_DOC_PATH,REPORT_PDF_PATH
REPORT_DOC_PATH = 'D:/2/doc/'
REPORT_PDF_PATH = 'D:/2/doc/'

# Word轉(zhuǎn)換為PDF
def word2pdf(filename):
    input = filename + '.docx'
    output = filename + '.pdf'
    pdf_name = output

    # 判斷文件是否存在
    os.chdir(REPORT_DOC_PATH)
    if not os.path.isfile(input):
        print u'%s not exist' % input
        return False
    # 文檔路徑需要為絕對路徑快压,因為Word啟動后當(dāng)前路徑不是調(diào)用腳本時的當(dāng)前路徑圆仔。
    if (not os.path.isabs(input)):  # 判斷是否為絕對路徑
        # os.chdir(REPORT_DOC_PATH)
        input = os.path.abspath(input)  # 返回絕對路徑
    else:
        print u'%s not absolute path' % input
        return False

    if (not os.path.isabs(output)):
        os.chdir(REPORT_PDF_PATH)
        output = os.path.abspath(output)
    else:
        print u'%s not absolute path' % output
        return False

    try:
        print input, output
        # enable python COM support for Word 2007
        # this is generated by: makepy.py -i "Microsoft Word 12.0 Object Library"
        gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4)
        # 開始轉(zhuǎn)換
        w = Dispatch("Word.Application")
        try:
            doc = w.Documents.Open(input, ReadOnly=1)
            doc.ExportAsFixedFormat(output, constants.wdExportFormatPDF, \
                                    Item=constants.wdExportDocumentWithMarkup,
                                    CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
        except:
            print ' exception'
        finally:
            w.Quit(constants.wdDoNotSaveChanges)

        if os.path.isfile(pdf_name):
            print 'translate success'
            return True
        else:
            print 'translate fail'
            return False
    except:
        print ' exception'
        return -1

if __name__ == '__main__':
    # img_path = gb.glob(REPORT_DOC_PATH + "*")
    # for path in img_path:
    #     print path
    #     rc = word2pdf(path)

    # rc = word2pdf('1')
    # print rc,
    # if rc:
    #     sys.exit(rc)
    # sys.exit(0)

    import os
    for dirpath, dirnames, filenames in os.walk(REPORT_DOC_PATH):
        for file in filenames:
            fullpath = os.path.join(dirpath, file)
            print fullpath, file
            rc = word2pdf(file.rstrip('.docx'))

5,參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坪郭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脉幢,更是在濱河造成了極大的恐慌歪沃,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫌松,死亡現(xiàn)場離奇詭異沪曙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)萎羔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門液走,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人外驱,你說我怎么就攤上這事育灸∧逯希” “怎么了昵宇?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長儿子。 經(jīng)常有香客問我瓦哎,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任蒋譬,我火速辦了婚禮割岛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘犯助。我一直安慰自己癣漆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布剂买。 她就那樣靜靜地躺著惠爽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瞬哼。 梳的紋絲不亂的頭發(fā)上婚肆,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音坐慰,去河邊找鬼较性。 笑死,一個胖子當(dāng)著我的面吹牛结胀,可吹牛的內(nèi)容都是我干的赞咙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼糟港,長吁一口氣:“原來是場噩夢啊……” “哼人弓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起着逐,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤崔赌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耸别,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體健芭,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年秀姐,在試婚紗的時候發(fā)現(xiàn)自己被綠了慈迈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡省有,死狀恐怖痒留,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蠢沿,我是刑警寧澤伸头,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站舷蟀,受9級特大地震影響恤磷,放射性物質(zhì)發(fā)生泄漏面哼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一扫步、第九天 我趴在偏房一處隱蔽的房頂上張望魔策。 院中可真熱鬧,春花似錦河胎、人聲如沸闯袒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搁吓。三九已至,卻和暖如春吭历,著一層夾襖步出監(jiān)牢的瞬間堕仔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工晌区, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留摩骨,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓朗若,卻偏偏與公主長得像恼五,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哭懈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容