IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> UIPATH 结合 Python 识别 PDF 中的表格 -> 正文阅读

[开发测试]UIPATH 结合 Python 识别 PDF 中的表格

工作中遇到的需求:
采购文档在用友U8中打印出来后, 识别表格并把表格内容附在邮件内容中发送给对应采购人员

摘录一下关键点.

首先, 我用的 Python 脚本如下:

import pdfplumber
import os

# 提取pdf表格整理成html表格
def extract_table():
    latest_pdf = get_latest_pdf()
    if not latest_pdf:
        return
    pdf = pdfplumber.open(latest_pdf)
    table_html = "<table border=1>"
    for page in pdf.pages:
        for table in page.extract_tables():
            for i, item in enumerate(table):
                table_html += "<tr>"
                if i == 0 and table_html.find("<th>") == -1:
                    for value in item:
                        table_html += "<th>" + value + "</th>"
                else :
                    for value in item:
                        table_html += "<td>" + value + "</td>"
                table_html += "</tr>"
    table_html += "</table>"
    return table_html

# 获取最新的pdf文件
def get_latest_pdf():
    pdf_dir = "C:/pdf"
    dir_list = os.listdir(pdf_dir)
    if dir_list:
        dir_list.sort(key = lambda fn : os.path.getmtime(pdf_dir + '/'+ fn), reverse = True)
        return pdf_dir + "/" + dir_list[0]


if __name__ == "__main__":
    print(extract_table())

先确保本地有Python环境 (我用的是Python3, 没测试过Python2) , 识别表格靠的就是 pdfplumber 这个包. 建一个 .py 后缀文件放在机器人流程目录下, 把上面的代码复制粘贴进去. 安装 pdfplumber 包, pip install pdfplumber 安装有问题的自行谷歌吧. 这个不展开篇幅了.

在这里插入图片描述

前面的流程先把采购文档打印成pdf文件放在一个目录下, 例如我这里用的是 C:/pdf, 不建议放机器人流程目录里, 要改动流程发布时会把pdf文件也发上去, 而且流程目录过大的情况下还会有异常.
参见: Error: Publish of Process project to Orchestrator failed. The operation has timed out.

接下来在 UIPATH中调用 Python脚本, 具体如下:

先在依赖中装 Uipath.Python.Activities 这个包:
在这里插入图片描述
使用 PythonScope 这个控件. 标红框的几个属性注意下,
Path 输入框填的是 Python 环境的安装目录.
Target 填的是本地安装的 Python 软件对应是多少位的, 32位的就选择 x86, 64位的就选x64
Version 填的是安装 Python 的版本, 当时写的时候 Uipath 只支持到最高 3.6 版本, 不清楚现在新版的依赖包能支持多少版本, 请自测, 建议要把版本对应上以防止出现一些莫名其妙的问题.
在这里插入图片描述
然后用 LoadScript 控件, 把脚本加载进来.
在这里插入图片描述
file 属性填脚本名称, 因为脚本是放在流程目录下的所以不需要带路径. 否则请把绝对路径带上.
Result 属性填一个 Uipath.Python.PythonObject 类型的变量.
在这里插入图片描述
再来用 InvokeMethod 控件, 调用脚本里写的 extract_table 方法,
instance 填上一步的脚本对象变量
Name 属性填脚本里写的方法.
input parameters 理论上来说用这个属性把 pdf 文件名传到脚本中才科学, 但忘记我当时为毛没这么搞了, 可以自测下看有没问题, 最好还是使用传参的方式做保险些, 当然这样做的话, 脚本就要稍微修改下, 具体就是将 get_latest_pdf() 方法替换成传进来的文件名参数.
PS: Python 脚本中的逻辑是拿目录中最新的一个 pdf 文件做识别, 所以必须保证打印出的PDF文件是正确的最新的. 不然可能会出现误将上一单的内容识别发送出去的异常.

result_data 也是一个 Uipath.Python.PythonObject 类型的变量. 用来存执行完脚本返回的数据.
在这里插入图片描述
最后用一个 GetObject 控件, 将 Python Object 类型的 result_data 转成 String 格式, 这个 table_html 变量就是一个 String 格式的变量. 注意在这一步最好加一个 Try Catch 控件捕获异常, 在正式使用时有遇见过因为表格内容过长导致解析失败的异常.

在这里插入图片描述
最终把解析到的 table_html 文本放入邮件控件, 注意几个标注的位置, 由上往下分别是附件, 邮件内容, HTML格式(表格内容需要勾选)

在这里插入图片描述
老规矩上个源码给小伙伴们参考下吧.

仓库位置 : https://gitee.com/geekqian/uipath_simple

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:55:28  更:2022-03-30 18:55:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:17:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码