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
    评论
WebOffice是一款由北京点聚信息技术有限公司提供的完全免费(商业用途也免费)且功能强大的在线Word/excel/wps编辑辅助控件,可以实现: 1.在线编辑Word、Excel、PPT、WPS... ... 2.全面支持MS Office的界面定制,包括对于Office2007的全面支持 3.修订留痕 4.限制打印、保存、复制 5.直接保存到服务器,支持标准Http Post协议 6.强大的书签管理 7.套红、文档保护 8.模板管理 9.其他功能扩展 10.提供开发论坛http://www.dianju.cn/forum/,在其中提供软件更新及问题回答服务 本控件不同于其它同类软件,不是基于微软的开放源码DsoFramer,也不基于OLE,可以解决DsoFramer及其派生产品的一些稳定性问题 本控件不同于其它同类收费软件,本控件完全免费和界面完全可控制。 点聚会定期更新本控件,并解答论坛上的询问,免费不代表免服务,每一个使用者都能得到及时服务。 安装包内包含: 1.WebOffice安装包(仅包含WebOffice控件) 2.WebOffice接口SDK 3.WebOffice网页接口调用例子 4.DES手写及签章系统(Office签章系统)试用版。 5.演示章及证书 6.点聚产品白皮书 WebOffice组件可以无缝集成点聚公司的电子签章和手写审批类产品。 点聚信息(http://www.dianju.com.cn)是国内专业的安全和文档中间件软件制造商。公司注重自主知识产权产品的研发,始终坚持技术为本、服务为先的原则,在电子印章、手写签批、安全版式文档和电子表单等领域处于国内领先水平。 点聚自主研发的版式文件系统独创性的将整个系统缩小为1M大小的组件,并在多项重要技术指标上领先PDF和其它版式格式。 点聚支持全系列手写及签章解决方案,可同时提供Office签章系统(Word/Excel/Wps)、网页签章系统、版式签章系统. 点聚是国内唯一一家同时拥有国密和军密资质的电子印章及安全文档产品提供商(国密、军密、公安部销售许可)。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值