Python/Django读取doc文档及在IIS8.5上部署所经历的波折及解决过程

Tips(碰到的主要问题):

  • doc转docx
  • “无效的类的字符串”
  • DCOM组件拒绝访问
  • NoneType has no attribute SaveAs

简要的业务过程:把Word文档(.doc,不是.docx)上传至服务器(用IIS+Django+wfastcgi部署),并读取文档中的内容与图片信息。
即这个过程中需要把doc文档另存为docx的格式,然后再去读取这个docx的文档(没有找到能直接读取doc文档的方法)。第二步其实做的其实比较顺利,因为docx已是一个开放的标准,通过python-docx库即可实现,需要的只是花时间熟悉下它的API。
所以这边重点说下doc文档另存为docx的爬坑过程(不能直接改文件扩展名的,不能用的,不然早。。。):
1、使用win32com的方式
参考:https://www.cnblogs.com/Jacklovely/p/5743868.html
这种方式就是通过Com组件去加载Word.Application:

from win32com import client as wc #引入组件

pythoncom.CoInitialize()
word = wc.Dispatch('Word.Application')
#word = wc.Dispatch('kwps.Application') #金山WPS的程序服务名称
doc = word.Documents.Open(filepath)  # 要被转换的doc文件,(完整的目标路径)
doc.SaveAs(filepath+'x', 12)  # 转化后路径下的文件,12表示docx类型
doc.Close()
word.Quit()

爬坑过程:

  • 本地的开发模式一切正常,但部署到服务器IIS8.5上问题就来了,报“无效的类的字符串”。 原因:没有安装Office/Word。。。
  • 开始想着office太大了而且又是收费(服务器上装个盗版的总感觉哪不对),况且只是想要个“另存为”而已,所以就装个免费的WPS,然后把代码中的服务名换成了’kwps.Application’,但还是一样的错(跟Word一样,本地开发模式都正常)。
  • 没办法,那就下个试用版的Office测下。装上之后运行,是没这个错了,但报“拒绝访问”,在系统日志中找到“XXX授予针对 CLSID 为 {000209FF-0000-0000-C000-000000000046},不可用 的 COM 服务器应用程序的 本地 激活 权限。此安全权限可以使用组件服务管理工具进行修改。”,即用户权限问题。又查一堆资料,主要是修改组件服务–>“DCOM配置”下的WORD权限。参考资料:http://blog.163.com/xiangyue119@126/blog/static/1651455322009242214739/
  • 上述配置完后,又报”NoneType has no attribute SaveAs“的错。即Word.Application貌似是找到了,但没有被正确的创建。所以上面的那段代码不能用了。继续再找资料,最后终于解决了:

2、使用LibreOffice程序的soffice.exe命令
PS:到LibreOffice官网下载,也是OpenOffice,文件也不大,就是界面不好用。
参考:https://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html
好在开源有太多的好东西,安装(建议路径不要有空格和中文,以避免意外),然后在Python/Django程序中用如下方法调用:

import subprocess

#执行LibreOffice下的soffice命令
#shell=True这个参数一定要有,即调用系统的cmd执行,否则会卡在这不成功
#其他就是指定原文件、目标目录、要转换成的格式
subprocess.call(['C:/LibreOffice5/program/soffice.exe', '--headless', '--convert-to', 'docx', phyFilepath,'--outdir', os.path.split(phyFilepath)[0]], shell=True)

终于解决了,可以把Office/WPS卸载了。
后面有看到一个pandoc的库,但没看到doc to docx的demo,没去试,所以不确定能不能用。

PS:
读取docx文档的信息与图片等,可参考:
https://www.cnblogs.com/zhanghongfeng/p/7043412.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值