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
Python/Django读取doc文档及在IIS8.5上部署所经历的波折及解决过程相关推荐
- python批量提取word指定内容_使用python批量读取word文档并整理关键信息到excel表格的实例...
目标 最近实验室里成立了一个计算机兴趣小组 倡议大家多把自己解决问题的经验记录并分享 就像在CSDN写博客一样 虽然刚刚起步 但考虑到后面此类经验记录的资料会越来越多 所以一开始就要做好模板设计(如下 ...
- python 爬取doc文档
doc_href='https://resource.lzbank.com:18106/cportalFileServer/files//site/doc/pc/20201/12021/goods/2 ...
- python批量提取word指定内容到excel_(转)用python批量读取word文档并整理关键信息到excel表格...
目标 最近实验室里成立了一个计算机兴趣小组 倡议大家多把自己解决问题的经验记录并分享 就像在CSDN写博客一样 虽然刚刚起步 但考虑到后面此类经验记录的资料会越来越多 所以一开始就要做好模板设计(如下 ...
- php如何读取doc文档,php创建读取 word.doc文档
创建文档; $html = "this is question"; for($i=1;$i<=3;$i++){ $word = new word(); $word->s ...
- java读取doc文档
为什么80%的码农都做不了架构师?>>> 本文永久地址:https://my.oschina.net/bysu/blog/1528130 相关jar下载地址: http://m ...
- python可以读取excel文档吗_python打开excel文件【python读取excel文件如何进行】
Python语言打开Excel文件? 一.安装xlrd模 到python官网下http://pypi.python.org/pypi/xlrd模块安装,前已经安装python 环境. 二.使用介 1. ...
- poi读取doc文档
导包:https://blog.csdn.net/u012488504/article/details/52996611 读取表格及字段及段落数:https://blog.csdn.net/qq578 ...
- python将文档转换成pdf_Python实现将DOC文档转换为PDF的方法
本文实例讲述了Python实现将DOC文档转换为PDF的方法.分享给大家供大家参考.具体实现方法如下: import sys, os from win32com.client import Dispa ...
- c语言读取word文件内容,c 读取word c 读取word文档
c++如何读取word 基本步骤(1)创建)一个 MFC 的程序工程. 注意:在VC中对WORD进行操作需要在MFC AppWizard - Step 2 of4中的Automaiton选项上打上勾. ...
最新文章
- kafaka使用 消息队列_Java使用消息队列还是直接使用线程池ExecutorService异步处理?...
- [BZOJ3545][ONTAK2010]Peaks
- 简述linux常见的安全措施,六个常用的Linux安全基本措施
- asp.net实现bt和pt—tracker request
- mysql使用已有的数据库_使用SQL操作MySQL数据库
- 后基因组行为遗传学:从革命到常规(上)
- 谷歌地图解析及ArcEngine加载谷歌地图方法
- 计算机网络2021题库
- 为何延时函数不起作用?
- 费雪MOGAFX方程式是什么? -
- 新课程上线 | 学习使用 Kotlin 进行 Android 开发的最佳时机!
- [Done]FindBugs: boxing/unboxing to parse a primitive
- SQL实现筛选出连续3天登录用户与窗口函数
- 水印相机定位不准确怎么办_云联相机app下载-云联相机app安卓版下载v1.0.0
- 易语言miniblink交互教程——第一课 了解 miniblink
- 自动导出文件夹中所有的文件名列表 存为记事本格式
- Android中使用Toast弹出提示消息的优化(弹出多个吐丝提示)- 代码已封装可直接使用
- for(i=0,j=0;i10,j6;i++,j++)问题
- 黑盒测试用例设计方法-边界值分析法
- 日本长崎市着手为和平祈念像重新上色