|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 万里晴空 于 2021-7-2 20:50 编辑
------------------------------------------------通过自己的努力找到其它方法解决------------------------------------------------------------------------------------
- # 先安装 codesoft 程序
- # 然后找到 安装pywin32包,然后通过python根目录包文件夹中找到win32com->client->运行makepy.py文件,点击对应codesoft程序
- # 生成com组件对接文件,然后在对接文件中查看最后一个类的调用注释说明,找到调用时用到的com组件名
- # 然后import win32com.client,然后用win32com.client.Dispatch("Codesoft.Application")创建对象
- # 可以正常调用了
- import os
- import sys
- import win32com.client
- currentFolder = os.getcwd() # 获取当前路径,
- sys.path.append(currentFolder) # 加载当前路径, 否则clr.AddReference("BarTender")会报找不到文件
- def PrintLAB(printer, printCount, filePath, items):
- """调用CodeSoft打印标签,通过调用com组件实现"""
- "printer-打印机名"
- "printCount-打印份数"
- "filePath-打印模版路径"
- "items-变量字典集"
- try:
- # 创建 Application
- csApp = win32com.client.Dispatch("Codesoft.Application")
- # 模版路径
- labfilename = filePath # currentFolder + "\\333.lab"
- # 打开标签模板文件
- csApp.Document.Open(labfilename, False)
- # 激活加载的文档
- doc = csApp.ActiveDocument
- # 设置打印机名
- doc.SelectPrinter(printer)
- # 模版文件的变量中传值
- try:
- # print(doc.Variables.Count) # 模板文件中变量个数统计
- # doc.Variables.Item(item).Value = items[item] # 方法已被__getitem__替代
- for key in items.keys():
- if doc.Variables.__getitem__(key):
- doc.Variables.__getitem__(key).Value = items[key] # 向模版变量中添加变量值
- except Exception as e:
- return e
- else:
- # 设置打印张数
- doc.Print(printCount) # 打印份数执行后自动开始打印
- finally:
- doc.Close # 关闭当前文档
- csApp.Quit # 退出当前应用
- return True, None
- except Exception as e:
- return False, e.args
- if __name__ == "__main__":
- items = {'IMEI1': '11111', 'IMEI3': '22222', 'VC': '33333'}
- PrintLAB('Doro PDF Writer', '1', r'C:\Users\Administrator\Desktop\python file\开发文档\打印\001\111.Lab', items)
-
复制代码
----------------------------------------------下面的问题如果有方法的依然可以回复------------------------------------------------------------------------------
我用pythonnet库(CLR)加载了DLL文件后,里面的类都可以正常加载,但在调用其中一个方法时报错{AttributeError: '__ComObject' object has no attribute 'Open'}
请诸位兄弟帮忙看下要怎么处理,附件为调用的DLL文件和报错图,如下代码是执行的源码。我试过用ctypes加载但好像识别不了,只有clr库可以识别,但在执行这个方法时报错,我用C#调用这个方法时是正常的。
报错的代码是加双----线的那段
- # Interop.LabelManager2 调用codesoft打印
- import clr
- import os
- import sys
- currentFolder = os.getcwd() # 获取当前路径,
- sys.path.append(currentFolder) # 加载当前路径, 否则clr.AddReference("LabelManager2")会报找不到文件
- clr.AddReference("LabelManager2") # 这里不需要 .dll 后缀
- # 载入一堆要用到的东西,也可以直接 from LabelManager2 import *
- # 下面这句话不能写入函数里
- from LabelManager2 import *
- def printLAB(printer, printCount, filePath, items):
- """调用codesoft打印标签"""
- "printer--打印机名"
- "printCount--打印份数"
- "filePath--打印模版路径"
- "items--变量字典集"
-
- # 创建 LabelManager2 的 Application
- csApp = ApplicationClass()
- # csApp.Options.Language = cs.enumLanguage.lppxSimplifiedChinese
- # 打开标签模板文件
- labfilename = filePath # currentFolder + "\\333.lab"
- # --------------------------------------------------------------------------------
- csApp.Documents.Open(labfilename, False) # 打开加载模版文件
- # ---------------------------------------------------------------------------------
- doc = csApp.ActiveDocument # 激活文件
-
- # 设置打印机
- doc.Printer.SwitchTo(printer) # "POSTEK TX6 (副本 1)"
- for var,item in items:
- if doc.Variables.Item(item.Key) is not None:
- doc.Variables.Item(item.Key).Value = item.Value
- # 设置打印张数
- r = doc.PrintDocument(printCount)
-
- if __name__ == "__main__":
- items = {'IMEI1': '11111', 'IMEI2': '22222', 'VC': '33333'} # 变量字典集
- printLAB('POSTEK TX6 (副本 1)', '1', r'E:\ClearSky\C Programs\python\BTW\111.Lab', items)
复制代码 |
|