- 概述
- 文档处理合同
- 发行说明
- 关于文档处理合同
- Box 类
- IPersistedActivity 接口
- PrettyBoxConverter 类
- IClassifierActivity 接口
- IClassifierCapabilitiesProvider 接口
- 分类器文档类型类
- 分类器结果类
- 分类器代码活动类
- 分类器原生活动类
- 分类器异步代码活动类
- 分类器文档类型功能类
- ContentValidationData Class
- EvaluatedBusinessRulesForFieldValue Class
- EvaluatedBusinessRuleDetails Class
- 提取程序异步代码活动类
- 提取程序代码活动类
- 提取程序文档类型类
- 提取程序文档类型功能类
- 提取程序字段功能类
- 提取程序原生活动类
- 提取程序结果类
- FieldValue Class
- FieldValueResult Class
- ICapabilitiesProvider 接口
- IExtractorActivity 接口
- 提取程序有效负载类
- 文档操作优先级枚举
- 文档操作数据类
- 文档操作状态枚举
- 文档操作类型枚举
- 文档分类操作数据类
- 文档验证操作数据类
- 用户数据类
- 文档类
- 文档拆分结果类
- DomExtensions 类
- 页类
- 页面分区类
- 多边形类
- 多边形转换器类
- 元数据类
- 词组类
- 词类
- 处理源枚举
- 结果表格单元类
- 结果表值类
- 结果表列信息类
- 结果表类
- 旋转枚举
- Rule Class
- RuleResult Class
- RuleSet Class
- RuleSetResult Class
- 分区类型枚举
- 词组类型枚举
- IDocumentTextProjection 接口
- 分类结果类
- 提取结果类
- 结果文档类
- 结果文档范围类
- 结果数据点类
- 结果值类
- 结果内容引用类
- 结果值令牌类
- 结果派生字段类
- 结果数据源枚举
- 结果常量类
- 简单字段值类
- 表字段值类
- 文档组类
- 文档分类类
- 文档类型类
- 字段类
- 字段类型枚举
- FieldValueDetails Class
- 语言信息类
- 元数据输入类
- 文本类型枚举
- 类型字段类
- ITrackingActivity 接口
- ITrainableActivity 接口
- ITrainableClassifierActivity 接口
- ITrainableExtractorActivity 接口
- 可训练的分类器异步代码活动类
- 可训练的分类器代码活动类
- 可训练的分类器原生活动类
- 可训练的提取程序异步代码活动类
- 可训练的提取程序代码活动类
- 可训练的提取程序原生活动类
- 基本数据点类 - 预览
- 提取结果处理程序类 - 预览
- Document Understanding ML
- Document Understanding OCR 本地服务器
- Document Understanding
- 智能 OCR
- 发行说明
- 关于“智能 OCR”活动包
- 项目兼容性
- 加载分类
- 将文档数字化
- 分类文档作用域
- 基于关键词的分类器
- Document Understanding 项目分类器
- 智能关键词分类器
- 创建文档分类操作
- 创建文档验证工件
- 检索文档验证工件
- 等待文档分类操作然后继续
- 训练分类器范围
- 基于关键词的分类训练器
- 智能关键词分类训练器
- 数据提取作用域
- Document Understanding 项目提取程序
- Document Understanding 项目提取程序训练器
- 基于正则表达式的提取程序
- 表单提取程序
- 智能表单提取程序
- 文档脱敏
- 创建文档验证操作
- 等待文档验证操作然后继续
- 训练提取程序范围
- 导出提取结果
- 机器学习提取程序
- 机器学习提取程序训练器
- 机器学习分类器
- 机器学习分类训练器
- 生成分类器
- 生成式提取程序
- 配置身份验证
- ML 服务
- OCR
- OCR 合同
- OmniPage
- PDF
- [未公开] Abbyy
- [未列出] Abbyy 嵌入式

Document Understanding 活动
读取 PDF 文件
您可以使用可读取文档中包含的所有字符的活动来读取 .pdf 文件的内容,并单独提取其内容。
根据您的需要,您可以使用可以识别字符的简单活动,也可以将其与 OCR 引擎一起使用。 使用 OCR 引擎的好处是,甚至可以对扫描、签名或手写的文档应用文档读取。
以下示例显示了读取 .pdf 文件的两种情况:
- 第一个示例说明了在使用“读取 PDF 文本”活动时如何读取
.pdf文件。 - 第二个示例说明了在使用“使用 OCR 读取 PDF”活动时如何读取
.pdf文件。这两种场景之间的主要区别在于,第二种场景也使用 OCR 引擎,这意味着如果分析的文件是图像、扫描件或包含签名或手写字段,则提取的信息详情比第一种场景更准确。您可以在“UiPath.PDF.Activities”包中找到这两个活动。
这两种场景只需要一个工作流,直到要求用户选择所需的阅读方法为止。
步骤
- 打开 Studio ,创建一个新“流程”。
- 在“工作流设计器”中添加“流程图”容器 。
- 创建名为
chooseOption变量,使其类型为“通用值” ,无默认值。备注:Add your
.pdffiles to the project directory in order to be able to run the entire process from the same place or download this example in order to use the given file.
- 创建名为
- 添加“输入对话框”活动,并将其连接到“开始节点” 。
- 在“属性”面板中,向“标签”字段添加“
"Choose one option below:"”表达式。 - Add the expression
{"Read PDF Text", "Read PDF With OCR"}in the Options field. - 在“标题”字段中添加值“
"Options"”。 - 在“结果”字段中添加
chooseOption变量。
- 在“属性”面板中,向“标签”字段添加“
- 在“输入对话框”活动之后添加“流程决策”活动并将这两个活动相连接。
- 在“属性”面板中,向“条件”字段添加表达式“
chooseOption = "Read PDF Text"”。
- 在“属性”面板中,向“条件”字段添加表达式“
- 添加一个“序列”容器,并将其连接到“流程决策”活动的“True”分支。“序列”的名称应为“读取 PDF 文本” 。此活动使用正则表达式提取信息。
-
创建下表中显示的变量:
表格 1. 要创建的变量
变量类型 默认值 extractedText字符串 不适用 arrayTextSystem.String[] 不适用 address泛型值 不适用 city字符串 不适用 phoneNumber字符串 不适用 invoiceNumber字符串 不适用 vendor泛型值 不适用 bankName字符串 不适用 bankAccount字符串 不适用 ibanCode字符串 不适用
-
- 添加一个“序列”容器,并将其连接到“流程决策”活动的“False”分支。“序列”的名称应为“使用 OCR 读取 PDF” 。此活动使用 OCR 引擎(Microsoft OCR 和 Tesseract OCR)提取信息。
-
创建下表中显示的变量:
表 2. 要创建的变量
变量类型 默认值 extractedTextTesseract字符串 不适用 extractedTextMicrosoft字符串 不适用 图 1. 工作流开始概览

-
- 使用“读取 PDF 文本”活动读取 PDF文件:
- 双击“读取 PDF 文本”序列容器,将其打开。
- 在序列中添加“读取 PDF 文本”活动。
- In the Properties panel, add the expression
"NPO Invoice.pdf"in the FileName field. - Add the value
"All"in the Range field. - 在“文本”字段中添加“
extractedText”变量。
- In the Properties panel, add the expression
- 将“分配”活动拖动至“读取 PDF 文本”活动后面。
- 在“收件人”字段中添加“
arrayText”变量。 - 在“值”字段添加表达式
extractedText.Split(Environment.NewLine.ToArray, StringSplitOptions.RemoveEmptyEntries)。
- 在“收件人”字段中添加“
- 在“分配”活动下方添加“IF 条件”活动。
- 在“条件”字段中添加表达式“
arrayText(0).Equals("Tiefland Glass AG")”。
- 在“条件”字段中添加表达式“
- 在“序列”容器中添加“分配”活动。
- 在“收件人”字段中添加“
address”变量。 - 在“值”字段添加表达式
arrayText(2)。
- 在“收件人”字段中添加“
- 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
- 在“收件人”字段中添加“
city”变量。 - 在“值”字段添加表达式
arrayText(3).Split(","c)(0)。
- 在“收件人”字段中添加“
- 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
- 在“收件人”字段中添加“
phoneNumber”变量。 - 在“值”字段添加表达式
arrayText(4).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(0)。
- 在“收件人”字段中添加“
- 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
- 在“收件人”字段中添加“
invoiceNumber”变量。 - 在“值”字段添加表达式
arrayText(4).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(1).Split("#"c)(1)。
- 在“收件人”字段中添加“
- 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
- 在“收件人”字段中添加“
vendor”变量。 - 在“值”字段添加表达式
arrayText(arrayText.Count-5)。
- 在“收件人”字段中添加“
- 在“Else”字段中添加“分配”活动。
- 在“收件人”字段中添加“
address”变量。 - 在“值”字段添加表达式
arrayText(1)。
- 在“收件人”字段中添加“
- 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
- 在“收件人”字段中添加“
city”变量。 - 在“值”字段添加表达式
arrayText(2).Split(","c)(0)。
- 在“收件人”字段中添加“
- 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
- 在“收件人”字段中添加“
phoneNumber”变量。 - 在“值”字段添加表达式
arrayText(3).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(0)。
- 在“收件人”字段中添加“
- 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
- 在“收件人”字段中添加“
invoiceNumber”变量。 - 在“值”字段添加表达式
arrayText(3).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(1).Split("#"c)(1)。
- 在“收件人”字段中添加“
- 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
-
在“收件人”字段中添加“
vendor”变量。 -
在“值”字段添加表达式
arrayText(arrayText.Count-5)。图 2. 包含“分配”活动的序列概览

-
- 在“IF 条件”容器之后,放置“遍历循环”活动。
- 在“值”字段中添加变量
arrayText。
- 在“值”字段中添加变量
- 在“遍历循环”活动的“正文”容器中添加“ If”活动。
- 在“条件”字段中添加表达式“
item.Contains("Bank Name:")”。
- 在“条件”字段中添加表达式“
- 在“Then”字段中添加“分配”活动。
- 在“收件人”字段中添加“
bankName”变量。 - 在“值”字段添加表达式
item.Split(":"c)(1)。
- 在“收件人”字段中添加“
- 在上一个“If 条件”活动之后添加“If 条件”活动。
- 在“条件”字段中添加表达式“
item.Contains("Bank Account:")”。
- 在“条件”字段中添加表达式“
- 在“Then”字段中添加“分配”活动。
- 在“收件人”字段中添加“
bankName”变量。 - 在“值”字段添加表达式
item.Split(":"c)(1)。
- 在“收件人”字段中添加“
- 在上一个“If 条件”活动之后添加“If 条件”活动。
- 在“条件”字段中添加表达式“
item.contains("IBAN Code:")”。
- 在“条件”字段中添加表达式“
- 在“Then”字段中添加“分配”活动。
-
在“收件人”字段中添加“
ibanCode”变量。 -
在“值”字段添加表达式
item.Split(":"c)(1)。图 3. “遍历循环”活动概览

-
- 返回到“读取 PDF 文本”序列,并在“遍历循环”活动下方添加“写入文本文件”活动。
-
Add the value
"InvoiceDetails.txt"in the FileName field. -
在“文本”字段中添加表达式
"Invoice details"+Environment.NewLine+Environment.NewLine+"Vendor: "+vendor+Environment.NewLine+"Vendor address: "+address+Environment.NewLine+"City: "+city+Environment.NewLine+"Phone number:"+phoneNumber+Environment.NewLine+"Invoice number:"+invoiceNumber+Environment.NewLine+"Bank name:"+bankName+Environment.NewLine+"Bank account:"+bankAccount+Environment.NewLine+"IBAN Code:"+ibanCode。图 4. “遍历循环”容器概览

-
- Return to the Main workflow working area.
- 通过“使用OCR 读取 PDF”活动读取 PDF 文件。
- 打开“使用 OCR 读取 PDF”序列容器。
- Drag a Read PDF With OCR activity inside the sequence.
- Add the value
"Invoice02.pdf"in the FileName field. - In the Properties panel, add the value
1in the DegreeOfParallelism field.
- Add the value
- Drag the Google OCR engine inside the Read PDF With OCR activity.
- 在“属性”面板中,向“文本”字段添加变量
extractedTextTesseract。
- 在“属性”面板中,向“文本”字段添加变量
- 拖动另一个“使用 OCR 读取 PDF”活动,并将其置于上一个“使用 OCR 读取 PDF”活动之后。
- Add the value
"Invoice02.pdf"in the FileName field. - In the Properties panel, add the value
1in the DegreeOfParallelism field.
- Add the value
- Drag the Microsoft OCR engine inside the Read PDF With OCR activity.
- In the Properties panel add the variable
extractedTextMicrosoftin the Text field.
- In the Properties panel add the variable
- Drag a Write Text File activity below the Read PDF With OCR activity.
- Add the value
"OCRMicrosoft.txt"in the FileName field. - 在“文本”字段中添加“
extractedTextMicrosoft”变量。
- Add the value
- Drag a Write Text File activity below the previous Write Text File activity.
-
Add the value
"OCRTesseract.txt"in the FileName field. -
在“文本”字段中添加“
extractedTextTesseract”变量。图 5. “使用 OCR 读取 PDF”活动概览

-
- 运行流程。 机器人使用指定流程提取数据,并将输出保存在
.txt文件中。
请访问以下链接,将该示例下载为ZIP格式的文件:示例。