由于需要实现在线预览
word文件的一个需求,尝试将word转换成html效果很差,于是想要将word转换为word转换成python库,所以我决定使用office组件或者Libreoffice组件来实现;
1.使用office组件将word转换成PDF文件(缺点:只支持windows平台)
原理:使用python win32 库 调用word底层vba,将word转成pdf
- 安装win32库
pip install pywin32
本地选装office套件,可以安装比较稳定的版本,比如office2010
from win32com.client import gencache
from win32com.client import constants, gencache
def createPdf(wordPath, pdfPath):
"""
word转pdf
:param wordPath: word文件路径
:param pdfPath: 生成pdf文件路径
"""
word = gencache.EnsureDispatch('Word.Application')
doc = word.Documents.Open(wordPath, ReadOnly=1)
doc.ExportAsFixedFormat(pdfPath,
constants.wdExportFormatPDF,
Item=constants.wdExportDocumentWithMarkup,
CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
word.Quit(constants.wdDoNotSaveChanges)
if __name__ == '__main__':
createPdf('C:\\Users\\Administrator\\Desktop\\test.docx','C:\\Users\\Administrator\\Desktop\\1.pdf')
注意:word文件路径和生成pdf文件路径一定要使用绝对路径
2.使用Libreoffice组件将word转换成PDF文件(可跨平台,但操作略微不同)
原理:使用python os库执行控制台指令,调用Libreoffice将word转换成PDF
首先:安装Libreoffice,安装地址>>
注意:安装完毕一定要设置环境变量
安装完毕之后打开控制台,
windows输入:soffice
Liunx输入:libreoffice6.4(6.4是版本,安装不同版本这个数字不一样)
如果没有提示什么异常情况就安装成功了(这里不多说)
windows下代码:
import os
import_file_name = "./test/test.docx"
output_file_path = "./test/"
os.system("soffice --headless --convert-to pdf %s --outdir %s" % (import_file_name, output_file_path))
Linux下代码:
import os
import_file_name = "/test/test.docx"
output_file_path = "/test/"
os.system("libreoffice6.4 --headless --convert-to pdf %s --outdir %s" % (import_file_name, output_file_path))