系列文章
【毕业设计】基于mqtt vue Thinkphp实现校园云打印小程序 (暂未完成更新)
前言
因为这篇文章【毕业设计】基于mqtt vue Thinkphp实现校园云打印小程序,我想通过mqtt唤醒客户端调用打印机,但是在实现过程中其他生产环境没办法使用,不是出现报错就是未知错误,期间找了很多方案,最后整合一下我的处理结果,建议大家配合文章查看,不然就搞不懂我在说啥
问题排查
第一个问题,pywintypes.com_error: (-2147221005, ‘无效的类字符串’, None, None)
通过编译后的tk软件在其他电脑上能运行但是不会处理,猜想应该是代码错误导致停止运行了
我的验证方法是,在其他电脑上运行源代码,发现出现错误
代码语言:javascript复制pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)
解决办法 报错的代码是这一段,大概就是调用wps出错,因为我的wps版本是抢先版,所以需要用kwps
代码语言:javascript复制 w = DispatchEx('wps.Application')
w.Visible = 0 # 不打开软件
w.DisplayAlerts = 0 # 不报错
doc = w.Documents.Open(f)
改了之后的代码,完美运行:
代码语言:javascript复制 w = DispatchEx('kwps.Application')
w.Visible = 0 # 不打开软件
w.DisplayAlerts = 0 # 不报错
doc = w.Documents.Open(f)
只需要装有同个版本的wps即可解决
第二个问题,pywintypes.com_error: (-2147221008, ‘尚未调用 CoInitialize。’, None, None)
原因:经网上查明:是由于多线程使用pywin32com造成的问题
解决办法:
代码语言:javascript复制import pythoncom
# 线程初始化
pythoncom.CoInitialize()
# 程序代码
# 程序代码
# 释放资源
pythoncom.CoUninitialize()
于是在调用打印代码的第一行写入线程初始化
代码语言:javascript复制pythoncom.CoInitialize()
末尾释放资源
代码语言:javascript复制pythoncom.CoUninitialize()
最后代码:
代码语言:javascript复制# 线程初始化
pythoncom.CoInitialize()
## 需要打印文件或文件夹的路径
path = r'C:UsersMACDesktoptest'
traver(path)
print("文件读取完毕,共有{}个".format(q.qsize()))
docx_print()
# 释放资源
pythoncom.CoUninitialize()
完美解决以上问题!!!
总结
以上就是记录今天遇到的问题,pywin32api打印机问题完美解决,不过调用的只能是wps