影刀RPA之接入草料二维码实现自动生成标签图片与打印

如果您还不认识(影刀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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值