影刀RPA实操指南:打印机任务自动化——批量打印与PDF导出
每个月给客户对账单、给仓库打面单、给财务打发票,打印这件事看着简单,量一大就是纯粹的体力活。用影刀RPA把"导出PDF加批量打印"整条链路自动化之后,我从每天手动打两小时降到现在点一下运行就完事。这篇文章把打印机任务自动化的完整做法拆给你:文档怎么批量转PDF、PDF怎么合并拆分、打印动作怎么批量触发。
我先说清楚一个前提:影刀RPA没有一条叫"批量打印"的现成指令,实际方案是"文件指令加循环加系统命令"组合出来的。网上有些教程不说清楚这一点,新手照着找指令找不到,白白浪费时间。
我做过最重的一个打印场景是电商售后单打印,每天三百多张,格式两种,还有合并归档需求。下面讲的每个环节都是那个项目里验证过的,包括我踩过的坑——比如用DOS命令打印时中文文件名乱码导致打印机罢工,排查了一晚上。
从安装到环境准备:打印自动化的前置检查
动手机器之前,把三件事确认好,后面少一半报错。
- 影刀RPA客户端正常登录,能打开"我开发的应用"界面并新建应用。
- Word或WPS、打印机驱动在本机装好,手动打印一张测试页确认硬件链路通。
- 浏览器插件装好(做网页端导出场景需要),在客户端设置里检查插件状态是已启用。
界面布局记三个区域就够用:左侧是应用和元素库列表,中间是流程画布,右侧是指令面板和指令详情。所有指令都在右侧面板搜名字,拖进画布后下方出现配置项。第一次用的新手把这个布局摸熟,后面看任何教程都不迷路。
打印机在系统里的名称要拿准确,后面DOS命令打印要用。控制面板里设备和打印机,右键打印机属性看到的完整名称复制下来存好,这个名字里有空格或特殊字符时命令里要用引号包住。
Word导出PDF与Excel导出为PDF:两条标准链路
办公文档转PDF是打印自动化的第一步,因为PDF格式固定,打印机不会因为排版跑偏。Word和Excel各有现成指令。
Word这条链路是三段式:【启动Word】打开文档并保存Word对象→【Word导出PDF】把对象导出→【关闭Word】收尾。Word导出PDF的导出范围支持四种:所有页面、当前页面、指定页面(设起始页数和结束页数)、当前选区。批量打印里最常用"指定页面",比如一沓合同只打签字页。
Excel这条链路同样三段:【打开/新建Excel】→【导出为PDF】→【关闭Excel】。Excel的导出为PDF指令有个"全部Sheet页"勾选项,默认不勾只导出当前激活的Sheet,勾上则整个工作簿每个Sheet都进PDF。对账单多Sheet的场景直接勾上,一步到位。
两个导出指令都有"如果文件存在则覆盖"的配置,批量场景建议勾上,不然第二次运行要么报错要么文件名带序号越积越多。PDF保存路径会自动创建不存在的目录,这点不用手动建文件夹。
图片转PDF用【图片转换为PDF】指令,两个参数:待转换的图片路径、PDF文件路径。发票截图、面单图片要归档打印的,先转PDF再统一处理。
xbot.pdf模块:文本提取、页面导出与合并
PDF的进阶操作要用Python模块xbot.pdf,四个方法覆盖我遇到的所有PDF处理需求:
| 方法 | 功能 | 典型场景 |
|---|---|---|
| extract_text() | 提取PDF文本 | 打印前校验单号 |
| extract_images() | 提取PDF里的图片 | 交付图片版材料 |
| extract_pages() | 导出指定页 | 拆分打印 |
| merge_pdfs() | 合并多个PDF | 归档成册 |
extract_pages是我的高频方法,打印场景里"每单只打第一页"就靠它。注意save_to参数必须带文件名,只给目录会报错,这是我第一次用时踩的小坑。
importxbotdefmain(args):# 输入:D盘下123.pdf(密码abc123);输出:提取后的新文件路径# 提取第1页单独存成一个PDF,用于拆分打印path=xbot.pdf.extract_pages('D:\\123.pdf',1,1,'D:\\print\\123_page1.pdf',password='abc123')print(path)# 合并两个PDF成一个归档文件,密码列表与文件列表一一对应merged=xbot.pdf.merge_pdfs(['D:\\a.pdf','D:\\b.pdf'],'D:\\print\\all.pdf')print(merged)不想写Python的也有等价的可视化指令:【合并PDF文档】在指令面板直接搜得到,原始文件路径支持多选,切Python模式还能传列表变量,新文件保存路径配好,文件重名时选覆盖、终止或末尾加序号。我日常用可视化指令为主,Python只在批量循环里嵌。
提取文本配合If判断可以做打印前校验:extract_text读出内容,检查里面有没有"已作废"字样,有就跳过这张不打。这个校验帮我拦过两次作废单据,省下的麻烦远超写代码花的十分钟。
批量打印落地:循环加运行DOS命令
到了真正"打印"这一步,最通用的方案是【运行DOS命令】指令调用系统命令触发打印。指令本身支持配置:DOS命令内容、工作目录、编码格式,输出保存执行结果、错误信息、退出代码三个变量。
单文件触发的核心思路是用动词打印(PrintTo)的方式调用系统默认打印动作,把文件交给打印队列。命令本身长这样:
# 在【运行DOS命令】指令中填入的命令模板(ForEach循环体内,f为当前文件路径变量)# 输入:f=待打印文件路径,printer=打印机名称# 输出:执行结果、错误信息、退出代码三个变量powershell-command"Start-Process -FilePath '%f%' -Verb PrintTo '%printer%'"# 编码格式选UTF-8,防止中文文件名在命令传输中变成乱码# 退出代码为0表示命令触发成功,非0就是没触发,要记录下来组合方式上,For Each列表循环遍历文件列表,循环体内一条【运行DOS命令】执行上面这行命令,命令里的%f%替换成当前循环项,%printer%替换成提前存好的打印机名称变量。整条链路没有一行Python,纯可视化指令拼接,新手也能搭。
整个批量流程的结构是:打开选择文件对话框让操作员选要打的文件(允许多选)→ForEach列表循环→循环体内运行DOS命令触发打印→打印日志记录结果。操作员只需要双击运行、选文件,剩下全自动。
编码格式这个参数要专门提一下:文件名里有中文时,DOS命令的编码格式选UTF-8,我第一次用默认编码,中文文件名传过去全变成问号,打印机队列里全是无效任务,就是这里的问题。
打印节奏上,每张文件之间加个短延迟,给打印机喘息时间。队列塞太快会出现丢任务,这是办公打印机不是生产级设备的普遍现象。
元素定位与变量:让文件列表驱动流程
批量打印的流程骨架靠两类变量撑起来:路径列表和循环变量。
文件列表的来源有三种:对话框手选、获取文件夹列表指令扫描整个目录、Excel清单驱动。我更推荐Excel清单驱动,清单里除了路径还有数量、备注等业务字段,打完还能回写状态列,可追溯。获取文件夹列表适合无人值守的监控目录场景,新文件落进来就打。
循环指令选型:固定数量用For次数循环,列表驱动用ForEach列表循环,界面上逐条点打印按钮的软件用循环相似元素。While条件循环留着做等待打印队列清空的重试逻辑。
元素定位在打印场景主要出现在操作打印机管理界面或软件自带打印窗口时。win元素优先,XPath写相对路径,CSS选择器作为网页端打印界面的备选。图像识别用来点老旧软件里捕获不到的打印按钮,搜索范围指定窗口对象,别依赖当前激活窗口。
流程控制与异常处理:打印卡死怎么办
打印是最容易物理卡死的自动化场景:缺纸、卡纸、打印机离线,都可能让任务挂着不走。异常处理框架必须搭好。
影刀RPA的Try-Catch结构这样用:把触发打印的指令放Try块,Catch块里用【打印日志】记录错误信息和出错的文件路径,Finally块里做清理,比如关闭残留的打印窗口。Catch里还可以配截图指令把当时屏幕存下来,事后对账一目了然。
防卡死的核心是While等待加超时:触发打印后,While循环检查打印队列状态(或简单地等待固定秒数),设一个最大重试次数,超过就记为失败跳到下一张,不让一张卡纸废掉整批任务。
还有一个隐蔽坑:某些软件打印时弹"另存为PDF"或格式确认框,弹了就挂起。解法在对话框那套体系里:提前判断元素是否存在,存在就用键盘回车或图像点击关掉,处理指令配等待加超时加If判断是标准写法。
数据处理与系统联动:打印记录与通知
批量打印的产出除了纸,还要有电子记录。我的流程每打一张就在Excel里写一行:文件名、打印时间、结果状态。收尾时用Python指令做个汇总,成功几张失败几张,拼成一段文本。
通知用飞书群机器人Webhook发打印摘要,失败清单附在消息里,第二天上班前打开飞书就知道昨晚打没打全。邮件通知也行,【发送邮件】指令把Excel记录当附件发给自己,归档方便。
HTTP请求的场景是把打印记录推给业务系统,POST过去JSON,返回的结果JSON反序列化后取状态码判断成功失败。这条进阶链路对接了仓管系统之后,纸质单据和系统状态能对上号了。
平台实战:电商单据批量导出与打印
电商场景里打印需求大多从平台后台开始,讲两个我实际跑过的。
淘宝天猫的电子面单:网页端订单列表勾选订单后点"打印面单",弹出的打印预览窗用图像点击"打印"按钮,或者更稳的做法是先走后台的导出功能拿Excel,本地批量生成PDF再统一打。登录态保持靠浏览器配置文件,Cookie别频繁清。
拼多多商家后台:发货单打印同样有确认弹窗,处理思路一致。批量下载的PDF是按订单分文件的,正好用【合并PDF文档】按门店合并成册,一次打完一次分拣。
抖店和TEMU的面单逻辑也类似,页面元素不同但套路相通:等待元素出现→点击打印/导出→处理下载对话框拿文件→本地PDF处理。四套后台我用同一套子流程框架,只换中间的定位元素,这就是模板化的价值。
工程化与调试:把打印流程做成模板
打印流程的工程化三条铁律:路径全部用变量不用写死、每张文件的打印结果必须落表、打印机名称做成流程参数而不是常量。换台打印机只改一个参数,不用满流程找。
调试技巧:打断点单步跑,右侧变量面板盯文件路径的拼接结果,路径错误是打印流程第一大报错来源。运行DOS命令后把退出代码打出来,非零就是没触发成功,别只看流程没报错就以为打了。
子流程拆分建议:01_获取文件列表、02_转PDF、03_触发打印、04_记录与通知,四个子流程加一个主调度,任何一环出问题单独修不影响其他。命名带编号,画布上顺序一目了然。
易错速查:打印自动化七大高频问题
- PDF保存路径报错:extract_pages的save_to参数必须带文件名,不能只给目录。
- DOS命令中文乱码:运行DOS命令的编码格式选UTF-8。
- 打印没反应但不报错:检查退出代码变量,非零说明命令失败,核对打印机名称是否与控制面板完全一致。
- 合并PDF顺序不对:原始文件路径列表的顺序就是合并顺序,列表变量在传参前先排好序。
- Excel导出PDF只有一页内容:检查"全部Sheet页"勾选项,默认只导当前Sheet。
- 打印中途弹窗挂起:处理指令前加等待元素(win)加If判断,弹窗用回车或图像点击关闭。
- 打印机队列堆积丢任务:每张文件打印之间加延迟,别无间隔连发。
学习资源与延伸阅读
这套"导出加合并加批量打印"的模板流程,我在好几个客户项目里反复改版过,注释齐全,完整流程源码我放在代码仓库 home.linyan.cloud,可以直接参考改造。
官方的"PDF操作自动化"和"Word自动化"专题视频课覆盖了导出指令的全部参数演示,xbot.pdf模块的参数说明以官方指令文档为准,写代码前对一遍签名能省不少调试时间。
#影刀RPA #RPA自动化 #批量打印 #PDF导出 #数据处理
作者:林焱