前几天收到客户3万多个word文件要印刷,为了能拼版,需要先将文件批量转化为PDF,人工肯定是不行,需要写一个自动转化脚本。
原理很简单,就是通过Word.Application接口打开word文件,另存为PDF。我实验一个20页的A4黑白文件转化需要20秒,效率低了一些,所以加入多进程加快速度。
首先,docx2pdf函数负责将docx格式文件转化为PDF:

def docx2pdf(input_file):"""docx转pdf"""word = Dispatch('Word.Application')doc = word.Documents.Open(input_file)doc.SaveAs(input_file.replace(".docx", ".pdf"), FileFormat=17)doc.Close()word.Quit()

源文件中可能混杂有doc和docx两种文件格式,所以有必要先将doc转化为docx:

def doc2docx(doc_name,docx_name):"""doc转docx"""try:# 首先将doc转换成docxword = client.Dispatch("Word.Application")doc = word.Documents.Open(doc_name)#使用参数16表示将doc转换成docxdoc.SaveAs(docx_name,16)doc.Close()word.Quit()except:pass

遍历文件夹docx文件,由函数find_docs负责:

def find_docs(path):"""获取文件夹下所有docx文件列表"""docs= []for root, dirs, filenames in walk(path):for file in filenames:if file.endswith(".doc"):doc2docx(f"{root}\\{file}",f"{root}\\{file}x")docs.append(f"{root}\\{file}x")elif file.endswith(".docx"):docs.append(f"{root}\\{file}")docs = list(set(docs))  #去重# print(docs)return docs

将这3块代码合并就可以实现多word转PDF了。下面是加入多进程,先看看CPU数量:

    from multiprocessing import cpu_countprint("cpu个数:",cpu_count())  #获取CPU个数

多进程要在主函数中完成,为了减少耦合,专门为多进程加了一个worker函数,来调用docx2pdf,实际上可以让多进程直接调用docx2pdf。我电脑是8核的,开了5个进程:

def worker(input_file):print("{}  开始转化...\n".format(input_file))docx2pdf(input_file)print("{}  【转化完成】".format(input_file))def main():  #多进程必须放在主程序中设置directory = r"C:\Users\31209\Desktop\新建文件夹"from multiprocessing import cpu_countprint("cpu个数:",cpu_count())  #获取CPU个数ps = Pool(5) #设置线程池docs = find_docs(directory)if docs !=[]:print("主进程开始执行:")for i in docs:# ps.apply(worker,args=(i,))          # 同步执行ps.apply_async(worker,args=(i,))  # 异步执行ps.close() # 关闭进程池,停止接受其它进程ps.join()# 阻塞进程print("主进程终止!")

完整代码:

from win32com.client import Dispatch
from os import walk
import os,timefrom win32com import client
def doc2docx(doc_name,docx_name):"""doc转docx"""try:# 首先将doc转换成docxword = client.Dispatch("Word.Application")doc = word.Documents.Open(doc_name)#使用参数16表示将doc转换成docxdoc.SaveAs(docx_name,16)doc.Close()word.Quit()except:passdef docx2pdf(input_file):"""docx转pdf"""word = Dispatch('Word.Application')doc = word.Documents.Open(input_file)doc.SaveAs(input_file.replace(".docx", ".pdf"), FileFormat=17)doc.Close()word.Quit()def find_docs(path):"""获取文件夹下所有docx文件列表"""docs= []for root, dirs, filenames in walk(path):for file in filenames:if file.endswith(".doc"):doc2docx(f"{root}\\{file}",f"{root}\\{file}x")docs.append(f"{root}\\{file}x")elif file.endswith(".docx"):docs.append(f"{root}\\{file}")docs = list(set(docs))  #去重# print(docs)return docsfrom multiprocessing import Pooldef worker(input_file):print("{}  开始转化...\n".format(input_file))docx2pdf(input_file)print("{}  【转化完成】".format(input_file))def main():  #多进程必须放在主程序中设置directory = r"C:\Users\31209\Desktop\新建文件夹"from multiprocessing import cpu_countprint("cpu个数:",cpu_count())  #获取CPU个数ps = Pool(5) #设置线程池docs = find_docs(directory)if docs !=[]:print("主进程开始执行:")for i in docs:# ps.apply(worker,args=(i,))          # 同步执行ps.apply_async(worker,args=(i,))  # 异步执行ps.close() # 关闭进程池,停止接受其它进程ps.join()# 阻塞进程print("主进程终止!")if __name__ == "__main__":main()

执行效果 :5个文件同时开始,转化完一个自动加入一个新任务

使用python多进程批量转换word为PDF相关推荐

  1. Python+pywin32批量转换Word文件为PDF文件

    代码功能:把当前文件夹中多个Word文件批量转换为PDF文件 技术原理:代码实际上是调用了Word的"导出"功能,模拟了手工转换的操作并实现了自动化,要求已正确安装Python扩展 ...

  2. python办公自动化实例(一):批量转换word文件为PDF

    场景:有大批word文件需要转PDF,手动word转pdf速度很慢,尤其当word文件很大的时候,这时候就可以使用程序高效批量转换word文件了. 实现效果如下图所示 代码如下: #!user/bin ...

  3. python多层遍历批量转换PPT为PDF

    Python多层遍历转换PPT为PDF 1. 需求分析 2. 环境配置 3. PPT转为PDF 4.文件夹遍历 5. 总程序 参考资料 1. 需求分析 因为Mac制作的PPT在一些Windows电脑打 ...

  4. Python用img2pdf库批量转换图片为PDF文件

    Python用img2pdf库批量转换图片为PDF文件 import os #导入os库 import time #导入时间库生成时间戳 import img2pdf #导入img2pdf库, 安装命 ...

  5. 批量转换word(docx)为pdf文件

    在某度搜索到的"批量转换 Word 文档"很多都是挂着免费的旗号,实际还是收费或者限制文件转换数量的. 这里分享一个开源,完全免费,不用在线上传,而且不用安装的方案. 1. 保存脚 ...

  6. 教你用8行代码将word转换为pdf格式 及 6行代码实现批量将word转换为pdf格式--python实用小技能get起来

    目录 将word转换为pdf格式 安装pywin32 上代码 运行结果 批量实现word转pdf 安装docx2pdf 上代码 运行结果 将word转换为pdf格式 安装pywin32 代码(Anac ...

  7. python实现批量转换文件编码(批转换编码示例)

    这篇文章主要介绍了python实现批量转换文件编码示例,指定文件编码.目录或扩展名即可进行转换,大家参考使用吧 # -*- coding:utf-8 -*- __author__ = 'walksky ...

  8. python 文件批量转换格式_python实现快速文件格式批量转换的方法

    用python实现文件夹下的成批文件格式转换 我们对于文件转换的需求很大,甚至于对于图片的格式,JPG和PNG格式在肉眼看来都没什么差别,但是对于计算机而言,它有时候就只接受这些肉眼看起来差不多的格式 ...

  9. 用Word转换向导批量转换Word文档(转)

    用Word转换向导批量转换Word文档(转)     目前,我校所在地区教育系统上下级之间文件材料的下达和上报都实现了网络传输.为了提高办公效率,主管教育部门要求这些材料一律使用纯文本格式.而由于排版 ...

  10. Python Pillow批量转换tif格式到jpg

    Python Pillow批量转换tif格式到jpg 也可以自定义多种格式转化 清晰度依旧哦 最近有个任务就是将tif转成jpg的,但是呢,一张一张去photoshop里面转太慢了,所以就想着用pyt ...

最新文章

  1. PHP基础——语法篇
  2. 笛卡尔集基本原理,等值连接,不等值连接,外连接,自连接
  3. Linux(三) 运行级别
  4. 阻塞队列之七:DelayQueue延时队列
  5. [html] Form表单是怎么上传文件的?你了解它的原理吗?
  6. c json输出html标签,Json编码HTML字符串
  7. python保存mat文件_python读取文件——python读取和保存mat文件
  8. 有道云怎么换行_markdown换行语法 有道云笔记markdown怎么换行?
  9. 利用HTML制作简易新闻网站的静态网页
  10. Linux发行版列表
  11. 主板诊断卡的使用方法视频教程
  12. mysql 民族_56个民族及民族代码的sql语句
  13. 解决object at 0x01DB75F0
  14. 无线射频专题《IEEE 802.11协议讲解4@可调参数,性能与兼容性考虑》
  15. 17.Unity3D商业游戏源码研究-变身吧主公-战斗-StateBase,PlayerBase
  16. 扫描远程服务器开放端口
  17. [论文阅读笔记14]Nested named entity recognition revisited
  18. java象棋实验报告_中国象棋java程序设计实验报告
  19. CPU运行功耗和什么相关?消耗的电能都去哪了?
  20. 第六次前端培训(JavaScript)

热门文章

  1. 激活函数(激励函数)理解总结
  2. 三星平板电脑安linux,三星平板电脑怎样刷机_三星平板t805c怎么刷机_三星平板怎么刷机...
  3. 【华为hcia基本了解(核心、汇聚、接入交换机)(网络设备-交换机、路由器、防火墙)(AP无线接入点、AC无线控制器)】-20211122
  4. 神州信息盘活农村三资,以金融科技服务三农助推乡村振兴
  5. 【原理分析】细说SpringBoot的自动装配原理
  6. cad文件格式(dwg、dxf、dwf、dws等)转其他格式(svg、,tiff、jpej、png、xml、pdf等)的四种方式(java)
  7. 合并两个有序数组——C语言
  8. C++游戏编程教程(一)
  9. EXCEL自定义功能区Ribbon
  10. 定时任务Cron常用表达式