活动
最新
False
横幅背景图像
Document Understanding 活动
上次更新日期 2024 年 4 月 10 日

读取 PDF 文件

您可以使用可读取文档中包含的所有字符的活动来读取 .pdf 文件的内容,并单独提取其内容。

根据您的需要,您可以使用可以识别字符的简单活动,也可以将其与 OCR 引擎一起使用。 使用 OCR 引擎的好处是,甚至可以对扫描、签名或手写的文档应用文档读取。

以下示例显示了读取 .pdf 文件的两种情况:
  • 第一个示例说明了在使用“读取 PDF 文本”活动时如何读取 .pdf 文件。
  • 第二个示例说明了在使用“使用 OCR 读取 PDF”活动时如何读取 .pdf 文件。

    这两种情况的主要区别在于,第二种情况也使用 OCR 引擎,这意味着如果分析的文件是图像、扫描文件或包含签名或手写字段,则提取的信息的详细信息比第一种情况更准确。 您可以在 UiPath.PDF.Activities 包中找到这两个活动。

这两种场景只需要一个工作流,直到要求用户选择所需的阅读方法为止。

此自动化流程的构建方法如下:

  1. 打开 Studio ,创建一个新“流程”
  2. 在“工作流设计器”中拖动“流程图”

    • 创建以下变量:

      变量名称

      变量类型

      默认值

      chooseOption

      泛型值

       
      注意:.pdf 文件添加到项目目录中,以便能够从同一位置运行整个流程,或下载此示例以使用给定文件。
  3. 拖动“ 输入对话框 ”活动并将其连接到“ 开始节点”。

    • 在“ 属性 ” 面板的“ 标签 ” 字段中添加表达式 "Choose one option below:"
    • 在“ 选项 ” 字段中添加表达式 {"Read PDF Text", "Read PDF With OCR"}
    • 在“标题”字段中添加值“"Options"”。
    • 在“结果”字段中添加 chooseOption 变量。
  4. 将“ 流程决策” 活动放置在“ 输入对话框 ”活动下方,并将其连接到该活动。

    • 在“ 属性 ” 面板的“ 条件” 字段中添加表达式 chooseOption = "Read PDF Text"
  5. 拖动“ 序列 ”容器并将其连接到“ 流程决策” 活动的“ True”分支。 序列 的名称应为“ 读取 PDF 文本”。 此活动使用正则表达式提取信息。

    • 创建以下变量:

      变量名称

      变量类型

      默认值

      extractedText

      字符串

       

      arrayText

      System.String[]

       

      address

      泛型值

       

      city

      字符串

       

      phoneNumber

      字符串

       

      invoiceNumber

      字符串

       

      vendor

      泛型值

       

      bankName

      字符串

       

      bankAccount

      字符串

       

      ibanCode

      字符串

       
  6. 拖动一个“ 序列 ”容器,并将其连接到“ 流程决策” 活动的“ False ”分支。 序列 的名称应为 Read PDF With OCR。 此活动使用 OCR 引擎(Microsoft OCR 和 Tesseract OCR)提取信息。
  • 创建以下变量:

    变量名称

    变量类型

    默认值

    extractedTextTesseract

    字符串

     

    extractedTextMicrosoft

    字符串

     

在此之前,您的工作流应如下所示:



使用“ 读取 PDF 文本 ”活动读取 PDF 文件
  1. 双击“ 读取 PDF 文本 ”序列容器,将其打开。
  2. 在序列中拖动“ 读取 PDF 文本 ”活动。

    • 在“ 属性 ” 面板的“ 文件名 ” 字段中添加表达式 "NPO Invoice.pdf"
    • 在“ 范围 ” 字段中添加值 "All"
    • 在“文本”字段中添加“extractedText”变量。
  3. 将“ 分配 ”活动放置在“ 读取 PDF 文本 ”活动下方。

    • 在“收件人”字段中添加“arrayText”变量。
    • 在“值”字段中添加表达式“extractedText.Split(Environment.NewLine.ToArray, StringSplitOptions.RemoveEmptyEntries)”。
  4. 将“ If 条件”活动拖动到“ 分配 ”活动下方。

    • 在“条件”字段中添加表达式“arrayText(0).Equals("Tiefland Glass AG")”。
  5. 将“分配”活动拖到“序列”容器中。

    • 在“收件人”字段中添加“address”变量。
    • 在“值”字段中添加表达式“arrayText(2)”。
  6. 拖动另一个“分配”活动,并将其置于上一个“分配”活动下方。

    • 在“收件人”字段中添加“city”变量。
    • 在“值”字段中添加表达式“arrayText(3).Split(","c)(0)”。
  7. 拖动另一个“分配”活动,并将其置于上一个“分配”活动下方。

    • 在“收件人”字段中添加“phoneNumber”变量。
    • 在“值”字段中添加表达式“arrayText(4).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(0)”。
  8. 拖动另一个“分配”活动,并将其置于上一个“分配”活动下方。

    • 在“收件人”字段中添加“invoiceNumber”变量。
    • 在“值”字段中添加表达式“arrayText(4).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(1).Split("#"c)(1)”。
  9. 拖动另一个“分配”活动,并将其置于上一个“分配”活动下方。

    • 在“收件人”字段中添加“vendor”变量。
    • 在“值”字段中添加表达式“arrayText(arrayText.Count-5)”。
  10. 将“ 分配 ”活动拖动到“ 其他 ”字段中。

    • 在“收件人”字段中添加“address”变量。
    • 在“值”字段中添加表达式“arrayText(1)”。
  11. 拖动另一个“分配”活动,并将其置于上一个“分配”活动下方。

    • 在“收件人”字段中添加“city”变量。
    • 在“值”字段中添加表达式“arrayText(2).Split(","c)(0)”。
  12. 拖动另一个“分配”活动,并将其置于上一个“分配”活动下方。

    • 在“收件人”字段中添加“phoneNumber”变量。
    • 在“值”字段中添加表达式“arrayText(3).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(0)”。
  13. 拖动另一个“分配”活动,并将其置于上一个“分配”活动下方。

    • 在“收件人”字段中添加“invoiceNumber”变量。
    • 在“值”字段中添加表达式“arrayText(3).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(1).Split("#"c)(1)”。
  14. 拖动另一个“分配”活动,并将其置于上一个“分配”活动下方。

    • 在“收件人”字段中添加“vendor”变量。
    • 在“值”字段中添加表达式“arrayText(arrayText.Count-5)”。

      在此之前,您的 序列 应采用以下方式查找:



  15. 在“ If 条件”容器下方放置“遍历循环”活动,然后双击该活动将其打开。

    • 在“值”字段中添加变量 arrayText
  16. 将“ If 条件”活动拖动到“ 遍历 循环”活动的“正文”容器内。

    • 在“条件”字段中添加表达式“item.Contains("Bank Name:")”。
  17. 在“ Then ” 字段中拖动“分配” 活动。

    • 在“收件人”字段中添加“bankName”变量。
    • 在“值”字段中添加表达式“item.Split(":"c)(1)”。
  18. 在上一个活动下方放置一个“ 如果 ”活动。

    • 在“条件”字段中添加表达式“item.Contains("Bank Account:")”。
  19. 在“ Then ” 字段中拖动“分配” 活动。

    • 在“收件人”字段中添加“bankName”变量。
    • 在“值”字段中添加表达式“item.Split(":"c)(1)”。
  20. 在上一个活动下方放置一个“ 如果 ”活动。

    • 在“条件”字段中添加表达式“item.contains("IBAN Code:")”。
  21. 在“ Then ” 字段中拖动“分配” 活动。

    • 在“收件人”字段中添加“ibanCode”变量。
    • 在“值”字段中添加表达式“item.Split(":"c)(1)”。

      这就是 For Each 容器的外观:



  22. 返回到“ 读取 PDF 文本 ”序列,并将“ 写入文本文件 ”活动拖动到“ 遍历 循环”活动下方。

    • 在“ 文件名 ” 字段中添加值"InvoiceDetails.txt"
    • 在“文本”字段中添加表达式 "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

      这就是 For Each 容器的外观:



  23. 返回到“ 工作流”工作区。
使用“ 使用 OCR 读取 PDF ”活动读取 PDF 文件
  1. 双击“ 使用 OCR 序列读取 PDF” 容器,将其打开。
  2. 在序列中拖动“ 使用 OCR 读取 PDF” 活动。

    • 在“ 文件名 ” 字段中添加值 "Invoice02.pdf"
    • 在“属性”面板中,向“并行度”字段添加“1”值。
  3. Google OCR 引擎拖动到“ 使用 OCR 读取 PDF” 活动中。

    • 在“ 属性 ”面板的“ 文本 ”字段中添加变量 extractedTextTesseract
  4. 拖动另一个 “使用 OCR 读取 PDF” 活动,并将其放置在上一个活动的下方。

    • 在“ 文件名 ” 字段中添加值 "Invoice02.pdf"
    • 在“属性”面板中,向“并行度”字段添加“1”值。
  5. Microsoft OCR 引擎拖动到“ 使用 OCR 读取 PDF” 活动中。

    • 在“ 属性 ”面板的“ 文本 ”字段中添加变量 extractedTextMicrosoft
  6. 将“ 写入文本文件 ”活动拖动到“ 使用 OCR 读取 PDF” 活动下方。

    • 在“ 文件名 ” 字段中添加值 "OCRMicrosoft.txt"
    • 在“文本”字段中添加“extractedTextMicrosoft”变量。
  7. 将“写入文本文件”活动拖动到上一个“ 写入 文本文件”活动下方。

    • 在“ 文件名 ” 字段中添加值 "OCRTesseract.txt"
    • 在“文本”字段中添加“extractedTextTesseract”变量。

      使用 OCR 读取 PDF” 序列应如下所示:



  8. 运行流程。 机器人使用指定流程提取数据,并将输出保存在 .txt 文件中。

此处下载示例。

此页面是否有帮助?

获取您需要的帮助
了解 RPA - 自动化课程
UiPath Community 论坛
Uipath 白色徽标
信任与安全
© 2005-2024 UiPath. All rights reserved.