一些重要文档格式之间的互转在目前显得尤为重要,pdf作为通用格式在现在各个平台上兼容性是最好的,所以写python脚本将这些word文档批量转换pdf是最好的解决方案。

由于windows系统对于word文档有天然的兼容性优势,所以转换起来很简单,普遍上是通过comtypes模块。

pip3 install comtypes
from comtypes.client import CreateObject
import osdef wd_to_pdf(folder):#获取指定目录下面的所有文件files = os.listdir(folder)#获取word类型的文件放到一个列表里面wdfiles = [f for f in files if f.endswith((".doc", ".docx"))]for wdfile in wdfiles:#将word文件放到指定的路径下面wdPath = os.path.join(folder, wdfile)#设置将要存放pdf文件的路径pdfPath = wdPath#判断是否已经存在对应的pdf文件,如果不存在就加入到存放pdf的路径内if pdfPath[-3:] != 'pdf':pdfPath = pdfPath + ".pdf"#将word文档转化为pdf文件,先打开word所在路径文件,然后在处理后保存pdf文件,最后关闭pdfCreate = self.wdToPDF.Documents.Open(wdPath)pdfCreate.SaveAs(pdfPath, self.wdFormatPDF)

其实难点还是在Linux系统下如何转换,因为comtypes依赖的win32com模块在linux下是无法使用的,所以在linux下面推荐另外一套解决方案也就是LibreOffice,LibreOffice 能够与 Microsoft Office 系列以及其它开源办公软件深度兼容,且支持的文档格式相当全面。

首先卸载当前系统的libreoffice,因为大多数系统默认安装的都是低版本,我们要使用的是最新稳定版

yum remove libreoffice-*

在https://www.libreoffice.org/download/download/上下载最新的稳定版gz压缩包

安装java依赖

yum -y install java-1.8.0-openjdk*

然后将刚才下载的gz压缩包解压后安装

tar xvf LibreOffice_6.2.5.2_Linux_x86-64_rpm.tar.gzcd LibreOffice_6.2.5.2_Linux_x86-64_rpm/RPMS/yum localinstall *.rpm

最后安装一些依赖

yum install cairo cups-libs libSM
yum install ibus
yum install libreoffice-headless

在命令行输入

libreoffice -help

会显示帮助文档就没问题了

解决中文乱码问题

安装windows字体(不装,会有乱码)将windows的字体复制到linux上C:WindowsFonts* windows上所有的字体(尝试过只复制部分,还是有乱码,全部字体就不会乱码了),上传到linux的/usr/share/fonts/chinese('chinese’目录是我自己建的,mkdir chinese)

chmod -R 755 /usr/share/fonts/chinese    // 修改权限fc-cache -fv        // 建立字体缓存fc-list | grep chinese        // 可以查看到已安装新增的字体了

如果你嫌麻烦,也可以修改系统语言来支持中文

执行命令:yum groupinstall "fonts"安装成功后,打开vim /etc/locale.conf按键 i 进入编辑模式, 把内容改为LANG="zh_CN.UTF-8"wq 存盘然后重启服务器reboot之后也可以支持中文转换了

转换命令

libreoffice6.2 --headless --convert-to pdf /root/4321.docx

此时,我们要改造一下转换脚本,做到可以兼容windows和Linx双系统,任意系统下都可以调用脚本进行转换

import subprocess
import os
try:from comtypes import client
except ImportError:client = Nonedef doc2pdf(doc):"""convert a doc/docx document to pdf format:param doc: path to document"""doc = os.path.abspath(doc) # bugfix - searching files in windows/system32if client is None:return doc2pdf_linux(doc)name, ext = os.path.splitext(doc)try:word = client.DispatchEx("Word.Application")worddoc = word.Documents.Open(doc)worddoc.SaveAs(name + '.pdf', FileFormat=17)except Exception:raisefinally:worddoc.Close()word.Quit()def doc2pdf_linux(doc):"""convert a doc/docx document to pdf format (linux only, requires libreoffice):param doc: path to document"""cmd = 'libreoffice6.2 --headless --convert-to pdf'.split() + [doc]p = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)p.wait(timeout=10)stdout, stderr = p.communicate()if stderr:raise subprocess.SubprocessError(stderr)

简直完美,可以收工了

使用Python3将word文档和pdf电子书进行格式互转(兼容Windows/Linux)相关推荐

  1. python win32转pdf 横版_使用Python3将word文档和pdf电子书进行格式互转(兼容Windows/Linux)...

    一些重要文档格式之间的互转在目前显得尤为重要,pdf作为通用格式在现在各个平台上兼容性是最好的,所以写python脚本将这些word文档批量转换pdf是最好的解决方案. 由于windows系统对于wo ...

  2. Java 将 Word 文档转换为 PDF 的完美工具

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:为什么魂斗罗只有 128 KB却可以实现那么长的剧情?个人原创+1博客:点击前往,查看更多 来源:https:/ ...

  3. 如何将Microsoft Word文档转换为PDF

    PDFs are handy for distributing documents so that they're seen the same way by all parties. Typicall ...

  4. poi doc转docx_编写简历及Python转Word文档为Pdf(续)

    续上文,讲述了前端求职面试,本文将讲述怎么找简历模板和怎么将Word文档转换pdf文件. [点击文末"阅读原文"即可查看我的简历(word版本.pdf版本)作为参考] 上文已说清楚 ...

  5. azw3转换为pdf_干货:如何Java 将 Word 文档转换为 PDF

    在日常工作中,PDF格式良好的视觉阅读性和稳定性使其使用越来越广泛.因此我们常会遇到需要将成型的Word文档转换为PDF格式的情况.本文就将通过使用Java程序来演示如何将Word文档转换成PDF格式 ...

  6. Java将Word文档转换为PDF的完美工具

    引用至:https://mp.weixin.qq.com/s/JIgo3f98HufGJx23mgtvag Java 将 Word 文档转换为 PDF 的完美工具 在日常工作中,PDF格式良好的视觉阅 ...

  7. 简要介绍word文档转换为pdf格式文档的工具

    找了很多工具,其实都是乱七八糟的,没几个好用的,最好还是用Adobe Acrobat Pro吧,这个就很方便了,而且转换的也不错. ABC Amber PDF Converter ABC Amber ...

  8. Word文档或PDF转图片

    首先把Word文档转为pdf,方法网上很多,比如用jacob.poi.pdfbox.xpdf.OpenOffice+JodConverter(Openoffice)等. 现在主要讲pdf转图片方法: ...

  9. 永中word页码怎么从第二页开始_快捷的word文档转pdf好方法推荐

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都会有分享,都是免费订阅,请您放心关注.注图文来源网络,侵删 wo ...

最新文章

  1. 【2-SAT问题】解题报告:POJ 3678 Katu Puzzle(2-SAT问题的判定)
  2. js css加载器,webpack的CSS加载器的使用
  3. [Unity] GameFramework 学习记录 5
  4. Android 系统(136)---OTA 差分升级包的制作
  5. 安卓手机怎么root_怎么在腾讯手机管家中一键获取Root权限
  6. win10 串口驱动下载链接
  7. Typescript无法导入json的问题
  8. 微信内网页分享,分享者能看到分享的图片(描述),但被分享者无法看到
  9. 使用 ROT13 算法加密解密数据
  10. ERROR 1366 (HY000): Incorrect string value: ‘\xE8\xB5\xB5\xE9\x9B\xB7‘ for column ‘s_name‘ at row 1
  11. The Thirteenth Of Word-Day
  12. 运维总监不会告诉你这些有趣但鲜为人知的 Linux 命令
  13. 《ThinkPHP 5实战》4个实战开发案例可从代码仓库下载
  14. arp断网攻击解决办法
  15. sap成本流怎么看_SAP成本计算过程
  16. 怎么用计算机来玩反恐精英,你第一次去网吧是为了玩什么游戏?网友:反恐精英一直到英雄联盟...
  17. 【Orangepi Zero2 全志H616】wiringPi外设SDK安装
  18. 我做了一个手写春联小网页,祝大家虎年暴富
  19. CMD无限弹出窗口命令
  20. matlab矩阵乘法运算结果不对,矩阵里乘法使用错误?

热门文章

  1. 7-8 输出上三角队形,数值从大到小
  2. Java OutputStream.write()的功能简介说明
  3. 程序设计天梯赛2021年选拔 L2-4红豆 (什么完全树给定后序遍历)
  4. Android 10获取手机相册照片变成白色空白
  5. java8的stream流编程的sorted排序方法
  6. git_error:src refspec dev does not match any
  7. 生活鸡汤---送给女人和男人的
  8. *((int *) arg)
  9. Botan的部分翻译
  10. graphics.h头文件图形绘画详解(史上最详细)