当前位置:   article > 正文

UIPATH 结合 Python 识别 PDF 中的表格_表格检测pdf python

表格检测pdf python

工作中遇到的需求:
采购文档在用友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())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

先确保本地有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://github.com/sancheo/UIPathExamples
https://gitee.com/geekqian/uipath_simple

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/326087
推荐阅读
相关标签
  

闽ICP备14008679号