600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python win32转pdf 横版_讲真 别再用win32com包来实现Word文档转PDF了

python win32转pdf 横版_讲真 别再用win32com包来实现Word文档转PDF了

时间:2018-08-29 15:35:14

相关推荐

python win32转pdf 横版_讲真 别再用win32com包来实现Word文档转PDF了

这几天有件大爽事。

之前一直放在Django原生的服务器的网站,终于放到Apache上了。并不是配置多难,也不是我懒,问题出在了用win32com实现word转pdf,我不能使用这个插件读取word,一直返回None。

下面的代码是win32com进行文件转化的标准代码,当时也是修改了好久才弄出来的,留给有需要的人吧。

# 这是我当时的语句

# 本地跑或者用Django原生服务器跑一点问题都没有,一放到Apache上就读不到了。

def doc2pdf(doc_name, pdf_name):

#停止使用

"""

:word文件转pdf

:param doc_name word文件名称

:param pdf_name 转换后pdf文件名称

"""

pythoncom.CoInitialize()

word = client.DispatchEx("Word.Application")

worddoc = word.Documents.Open(doc_path, ReadOnly=False) # 读word文件,一直返回None

worddoc.SaveAs(pdf_name, FileFormat=17) # 存储为pdf文件

worddoc.Close()

word.Quit()

pythoncom.CoUninitialize()

历经磨难,曲线救国。我找到了一个本来应该放在Linux环境中的方法(具体的下载、配置的细节在这篇文章中),大意是说可以使用Libre Office的soffice.exe插件直接进行PDF转化。

我修改的代码如下:

def trans_pdf_by_libre_model(docx_name, pdf_dir_path):

"""

zihe 修改

说明:

使用该程序进行doc文档转化pdf

原理:通过libreOffice开源软件,配置其环境变量,达到用命令行可以转化pdf的目的

soffice --headless --convert-to pdf ./1.docx

可以通过python模拟命令行操作,即完成了本次程序的升级

:param doc_name word文件名称

:param pdf_name 转换后pdf文件名称

"""

command = 'soffice --headless --convert-to pdf {0} --outdir {1}'.format(docx_name, pdf_dir_path) # 命令行

# e.g.: soffice --headless --convert-to pdf ./docx/1.docx -outdir ./pdf/

# 这里pdf的位置只需要到文件夹即可,这个例子中,pdf会自动保存为'./pdf/1.pdf '

os.system(command) # 执行

同时,Apache可以完美兼容这种转化模式,成功部署到了Apache服务器上,使我们的网站稳定性、安全性上升。并且,这种方式进行的转化明显要快于win32com的转化。

最后,我想说,Django虽然可以做到轻量、快速地开发网站,但是为了维持稳定和安全性,仍然不能缺少部署Apache等Web服务器软件上这一步,而在部署环境的转移过程中,会出现很多意想不到的问题,比如本文出现的这个win32com读取失败的情况,以及未做提及的绝对路径和相对路径的问题,这些问题会让我作为一个开发者很不爽。所以也不禁让我反思,Django真的“轻量”了么?

开发上线一两周,部署环境两三月。尴不尬?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。