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

摘录一下关键点.

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

import pdfplumber
import os# 提取pdf表格整理成html表格
def extract_table():latest_pdf = get_latest_pdf()if not latest_pdf:returnpdf = 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://github.com/sancheo/UIPathExamples
https://gitee.com/geekqian/uipath_simple

UIPATH 结合 Python 识别 PDF 中的表格相关推荐

  1. Python提取pdf中的表格数据(附实战案例)

    14天阅读挑战赛 今天给大家介绍一个Python使用工具,那就是从pdf文件中读取表格数据,主要用到第三方库 pdfplumber. pdfplumber简介 pdfplumber是一款基于pdfmi ...

  2. 用python 将PDF中的表格转化为Excel

    这几天想统计一下<中国人文社会科学期刊 AMI 综合评价报告(2018 年):A 刊评价报告>中的期刊,但是只找到了该报告的PDF版,对于表格的编辑不太方便,于是想到用Python将表格转 ...

  3. python读取pdf表格_[转]Python 解析 PDF 文本和表格的四大方法介绍

    Python 解析 PDF 文本和表格的四大方法介绍 == code for paper and NSFC Proj. parsing==: https://gitee.com/sonica/pdf_ ...

  4. PDFPlumber使用入门+python实现PDF中表格转化为Excel的方法

    PDFPlumber使用入门:https://blog.csdn.net/weixin_48629601/article/details/107224376 python实现PDF中表格转化为Exce ...

  5. python分析pdf年报 货币现金_如何用Python从大量pdf 中提取表格中的数据进行分析?...

    根据一楼答案@森林的建议 说说我的处理经验 我也是借助开源项目tabula,不得不说tabula的功能确实很强大. 我是用Python来处理数据,但是没有用tabula-py,因为表格跨列跨行等情况比 ...

  6. python抓取pdf中的表格转换为csv表格汉语站名批量变英文(拼音)名

    1, PDF转csv import tabulafrom tabula import read_pdf from tabulate import tabulate import pandas as p ...

  7. python提取pdf中的图片_提取PDF中内容(表格篇)

    由于(质量优质)PDF较好的阅读性,工作当中难免有文件使用PDF格式保存和流通的.但是由于PDF过于追求视觉的享受,所以在编辑其内容元素上相较微软office系列的确困难.不时会碰到看的到内容却难以直 ...

  8. 怎么提取pdf中的表格数据_如何从pdf第1部分中提取表格数据

    怎么提取pdf中的表格数据 In this article, we talk about the challenges and principles of extracting tabular dat ...

  9. Camelot:从pdf中提取表格数据

    Camelot:从pdf中提取表格数据 文章目录: 一.Camelot的介绍和安装 1. Camelot介绍 2. Camelot的安装 3. 其他 二.Camelot的使用 1. 快速入门使用 2. ...

最新文章

  1. python如何处理异常_python如何进行异常处理
  2. 17篇论文入选CVPR 2019,百度AI都在关注什么?(附论文地址)
  3. 《算法竞赛中的初等数论》(四)正文 0x40反演(ACM / OI / MO)(十五万字符数论书)
  4. 脑电分析系列[MNE-Python-13]| bad通道介绍
  5. Android换肤逻辑
  6. 数据挖掘SPSS Clementine 12.0.3 多国语言(含中文)破解版
  7. 速约~阿里云存储新品发布会
  8. python中列表,元组,字符串如何互相转换
  9. 百度地图 绘制运动轨迹_百度地图创新破局:声音个性表达、出行精准预估与全球无碍...
  10. python的txt导入数据库_python将txt文档每行内容循环插入数据库的方法
  11. mysql安装教程8.0
  12. macbook 安装任意来源
  13. python划分有限元网格_有限元分析网格划分的步骤和类型
  14. oo结尾的单词发音规律
  15. win10执行压缩卷的注意点,否则出现磁盘空间不够的情况
  16. 【python】OpenCV—Blur, Threshold, Gradient, Morphology(2)
  17. isFinite() 如果参数是 NaN,正无穷大或者负无穷大,会返回 false,其他返回 true
  18. unity水流效果插件Obi Fluidv4.1
  19. Keras Conv1d 参数及输入输出详解
  20. 我为 Redis 找到了一个新家——Redis 之父当年的困兽之斗

热门文章

  1. css第四课:id选择器及通配选择器
  2. 使用labelme打标签,详细教程
  3. android OTA更新
  4. 简单搜索引擎使用技巧
  5. 新办的卡为什么显示无服务器,为什么插入卡后显示无服务,有时有有时又没有?...
  6. 原生js调用手机拍照功能
  7. 编程基础——鱼龙混杂来两波
  8. 阿里云telnet 3306端口失败
  9. android ui开发知乎,实现知乎app的主界面效果
  10. 信息论——JS散度(Jensen-Shannon)