如果您还不认识(影刀RPA)这个宝藏应用强烈建议您阅读这篇文章(影刀RPA之我对这个宝藏应用的见解)
运行的流程和调用的解释说明:
其实这个是通过调用草料二维码官方的接口来实现批量生成图片的,然后生成的图片在本地的文件夹内。生成图片的代码可以参考(对接草料二维码批量生成标签的Python代码),然后其他的是使用了影刀官方自带的一个打印图片,先设置默认的打印机,然后给打印机设置打印任务,由于官方的打印板块无法设置图片方向,所以我用Python开发了一个自定义指令来实现图片的方向,具体的代码可以查看(批量打印的Python代码)
以下是影刀板块的流程
对接草料二维码批量生成标签的Python代码
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块
import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
def main(args):
pass
import hashlib
import requests
from openpyxl import load_workbook
#NOTE 运行前请安装好 hashlib、requests、openpyxl 依赖库
def download_images(file, api_key, api_secret, cliT, folder):
'''
读取excel数据,生成url并下载对应的图片到`folder`目录
@param file: excel文件路径
@param api_key: 用户账号api key
@param api_secret
@param cliT: 标签样式编号
@param folder: 图片保存路径
'''
wb = load_workbook(file)
ws = wb.active
for i, row in enumerate(ws.iter_rows(min_row=2)):
dct = {f'cliF{i}': row[i].value for i in range(1, ws.max_column)}
dct['api_key'] = api_key
dct['cliD'] = row[0].value
dct['cliT'] = cliT
dct['return_file'] = ''
lst = [str(key) + '=' + str(dct[key]) for key in sorted(dct.keys())]
string = '&'.join(lst) + api_secret
md5 = hashlib.md5()
md5.update(string.encode('UTF-8'))
sign = md5.hexdigest()
string = string.replace(f'return_file={api_secret}', f'sign={sign}&return_file=')
url = 'https://open-api.cli.im/cli-open-platform-service/v1/labelStyle/createWithKey'
_url = url + '?' + string
resp = requests.get(_url)
with open(f'{folder}/image{i+1:0>3}.png', 'wb') as f:
f.write(resp.content)
def main(args):
api_key = '修改成你自己的key'
api_secret = '修改成你自己的secret'
cliT = '标签样式编号'
file = 'demo.xlsx'
folder = '.'
download_images(file, api_key, api_secret, cliT, folder)
批量打印的Python代码
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块
import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
def main(args):
pass
import win32print
import win32ui
import win32con
from PIL import Image, ImageWin
def print_image(image_path):
"""
使用默认打印机打印图片,并设置图片为横向
:param image_path: 图片文件的路径
"""
# 打开默认打印机
printer_name = win32print.GetDefaultPrinter()
hprinter = win32print.OpenPrinter(printer_name)
try:
# 打开图片
img = Image.open(image_path)
# 设置打印机的设备上下文(DC)
hdc = win32ui.CreateDC()
hdc.CreatePrinterDC(printer_name)
# 开始文档
hdc.StartDoc("Printing Image")
# 开始页面
hdc.StartPage()
# 获取图片的宽度和高度
img_width, img_height = img.size
# 获取打印纸的宽度和高度
paper_width = hdc.GetDeviceCaps(win32con.HORZRES)
paper_height = hdc.GetDeviceCaps(win32con.VERTRES)
# 设置打印机分辨率(DPI)
dpi_x = hdc.GetDeviceCaps(win32con.LOGPIXELSX)
dpi_y = hdc.GetDeviceCaps(win32con.LOGPIXELSY)
# 计算打印尺寸(将图片尺寸按DPI缩放)
printable_width = paper_width
printable_height = int((img_height * paper_width) / img_width)
if printable_height > paper_height:
# 如果计算后的高度超过纸张高度,则按比例缩小
printable_height = paper_height
printable_width = int((img_width * paper_height) / img_height)
# 将图片绘制到打印机DC上
dib = ImageWin.Dib(img)
dib.draw(hdc.GetHandleOutput(), (0, 0, printable_width, printable_height))
# 结束页面和文档
hdc.EndPage()
hdc.EndDoc()
finally:
# 关闭打印机
win32print.ClosePrinter(hprinter)
# 示例调用
#image_path = r"C:\Users\windows\Desktop\1\新建文件夹\ba4c0ce6693ef2f482b52ff3ff43c6e.png"
#print_image(image_path)
标签:img,height,RPA,影刀,二维码,api,hdc,key,import
From: https://blog.csdn.net/weixin_43321334/article/details/142487052