python批量实现Word文件转换为PDF文件


Posted in Python onMarch 15, 2018

本文为大家分享了python批量转换Word文件为PDF文件的具体方法,供大家参考,具体内容如下

1、目的

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

python批量实现Word文件转换为PDF文件

2、遍历目录

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

2.1.调用glob

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

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

2.2.调用os.walk

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

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

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

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: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)
# 开始转换
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 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转换为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启动后当前路径不是调用脚本时的当前路径。
 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 -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、参考资料

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
CentOS 7 安装python3.7.1的方法及注意事项
Nov 01 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
python高斯分布概率密度函数的使用详解
Jul 10 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
Pytorch之parameters的使用
Dec 31 Python
详解python tkinter模块安装过程
Jan 06 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
ROS系统将python包编译为可执行文件的简单步骤
Jul 25 Python
python实现求解列表中元素的排列和组合问题
Mar 15 #Python
Python遍历某目录下的所有文件夹与文件路径
Mar 15 #Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 #Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 #Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 #Python
python实现word 2007文档转换为pdf文件
Mar 15 #Python
python中使用PIL制作并验证图片验证码
Mar 15 #Python
You might like
很好用的PHP数据库类
2009/05/27 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
PHP错误机制知识汇总
2016/03/24 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
基于Jquery实现表格动态分页实现代码
2011/06/21 Javascript
jQuery仿天猫实现超炫的加入购物车
2015/05/04 Javascript
angular基于路由控制ui-router实现系统权限控制
2016/09/27 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
解决vue的touchStart事件及click事件冲突问题
2020/07/21 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
python GUI图形化编程wxpython的使用
2019/07/19 Python
Python实现自动访问网页的例子
2020/02/21 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
简单了解Django项目应用创建过程
2020/07/06 Python
Android面试题及答案
2015/09/04 面试题
测绘工程本科生求职信
2013/10/10 职场文书
销售岗位职责范本
2014/06/12 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
Nginx的反向代理实例详解
2021/03/31 Servers
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
MySQL创建管理子分区
2022/04/13 MySQL