Python

来源:互联网 发布:大宗师 外网端口 编辑:程序博客网 时间:2024/06/16 07:18

1,目的

通过万能的Python把一个目录下的所有Word文件转换为PDF文件。

Word to PDF .jpg

2,遍历目录

作者总结了三种遍历目录的方法,分别如下。

2.1,调用glob

遍历指定目录下的所有文件和文件夹,不递归遍历,需要手动完成递归遍历功能。

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

2.2,调用os.walk

遍历指定目录下的所有文件和文件夹,递归遍历,功能强大,推荐使用。

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

2.3,自己DIY

遍历指定目录下的所有文件和文件夹,递归遍历,自主编写,扩展性强,可以学习练手。

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,备注

注意,如果遍历过程中,出现文件名称或文件路径乱码问题,可以查看本文的参考资料来解决。

3,转换Word文件为PDF

通过Windows Com组件(win32com),调用Word服务(Word.Application),实现Word到PDF文件的转换。因此,要求该Python程序需要在有Word服务(可能至少要求2007版本)的Windows机器上运行。

#coding:utf8import os, sysreload(sys)sys.setdefaultencoding('utf8')from win32com.client import Dispatch, constants, gencacheinput = 'D:\\2\\test\\11.docx'output = 'D:\\2\\test\\22.pdf'print 'input file', inputprint '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)# 开始转换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,批量转换

要实现批量准换,将第2步和第3步的功能组合在一起即可,直接上代码。

# -*- coding:utf-8 -*-# doc2pdf.py: python script to convert doc to pdf with bookmarks!# Requires Office 2007 SP2# Requires python for win32 extensionimport glob as gbimport sysreload(sys)sys.setdefaultencoding('utf8')'''参考:http://blog.csdn.net/rumswell/article/details/7434302'''import sys, osfrom win32com.client import Dispatch, constants, gencache# from config import REPORT_DOC_PATH,REPORT_PDF_PATHREPORT_DOC_PATH = 'D:/2/doc/'REPORT_PDF_PATH = 'D:/2/doc/'# Word转换为PDFdef 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启动后当前路径不是调用脚本时的当前路径。    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)        # 开始转换        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 -1if __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,参考资料

  • 利用Python将word 2007的文档转为pdf文件
    http://blog.csdn.net/rumswell/article/details/7434302
  • Python 将word文件转换为PDF文件
    http://blog.csdn.net/lis_12/article/details/54603298
  • 遍历某目录下的所有文件夹与文件的路径、输出中文乱码问题
    http://blog.csdn.net/yongh701/article/details/46907383
原创粉丝点击