activities
latest
false
Document Understanding 活动
Last updated 2024年10月29日

读取 PDF 文件

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

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

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

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

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

步骤
  1. 打开 Studio ,创建一个新“流程”
  2. 在“工作流设计器”中添加“流程图”容器。
    1. 创建名为 chooseOption 的变量,使其类型为“通用值”,无默认值。
      注意:.pdf 文件添加到项目目录中,以便能够从同一位置运行整个流程,或下载此示例以使用给定文件。
  3. 添加“输入对话框”活动,并将其连接到“开始节点”。
    1. 在“ 属性 ” 面板的“ 标签 ” 字段中添加表达式 "Choose one option below:"
    2. 在“ 选项 ” 字段中添加表达式 {"Read PDF Text", "Read PDF With OCR"}
    3. 在“标题”字段中添加值“"Options"”。
    4. 在“结果”字段中添加 chooseOption 变量。
  4. 在“输入对话框”活动之后添加“流程决策”活动并将这两个活动相连接。
    1. 在“ 属性 ” 面板的“ 条件” 字段中添加表达式 chooseOption = "Read PDF Text"
  5. 添加一个“序列”容器,并将其连接到“流程决策”活动的“True”分支。“序列”的名称应为“读取 PDF 文本”。此活动使用正则表达式提取信息。
    1. 创建下表中显示的变量:
      表 1. 要创建的变量

      变量名称

      变量类型

      默认值

      extractedText

      字符串

      不适用

      arrayText

      System.String[]

      不适用

      address

      泛型值

      不适用

      city

      字符串

      不适用

      phoneNumber

      字符串

      不适用

      invoiceNumber

      字符串

      不适用

      vendor

      泛型值

      不适用

      bankName

      字符串

      不适用

      bankAccount

      字符串

      不适用

      ibanCode

      字符串

      不适用
  6. 添加一个“序列”容器,并将其连接到“流程决策”活动的“False”分支。“序列”的名称应为“使用 OCR 读取 PDF”。此活动使用 OCR 引擎(Microsoft OCR 和 Tesseract OCR)提取信息。
    1. 创建下表中显示的变量:
      表 2. 要创建的变量

      变量名称

      变量类型

      默认值

      extractedTextTesseract

      字符串

      不适用

      extractedTextMicrosoft

      字符串

      不适用
    图 1. 工作流开始概览

  7. 使用“读取 PDF 文本”活动读取 PDF 文件:
    1. 双击“读取 PDF 文本”序列容器,将其打开。
    2. 在序列中添加“读取 PDF 文本”活动。
      1. 在“ 属性 ” 面板的“ 文件名 ” 字段中添加表达式 "NPO Invoice.pdf"
      2. 在“ 范围 ” 字段中添加值 "All"
      3. 在“文本”字段中添加“extractedText”变量。
  8. 将“分配”活动拖动至“读取 PDF 文本”活动后面。
    1. 在“收件人”字段中添加“arrayText”变量。
    2. 在“值”字段中添加表达式“extractedText.Split(Environment.NewLine.ToArray, StringSplitOptions.RemoveEmptyEntries)”。
  9. 分配活动下方添加IF 条件活动。
    1. 在“条件”字段中添加表达式“arrayText(0).Equals("Tiefland Glass AG")”。
  10. 分配活动添加至序列容器。
    1. 在“收件人”字段中添加“address”变量。
    2. 在“值”字段中添加表达式“arrayText(2)”。
  11. 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
    1. 在“收件人”字段中添加“city”变量。
    2. 在“值”字段中添加表达式“arrayText(3).Split(","c)(0)”。
  12. 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
    1. 在“收件人”字段中添加“phoneNumber”变量。
    2. 在“值”字段中添加表达式“arrayText(4).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(0)”。
  13. 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
    1. 在“收件人”字段中添加“invoiceNumber”变量。
    2. 在“值”字段中添加表达式“arrayText(4).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(1).Split("#"c)(1)”。
  14. 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
    1. 在“收件人”字段中添加“vendor”变量。
    2. 在“值”字段中添加表达式“arrayText(arrayText.Count-5)”。
  15. 在“Else”字段中添加“分配”活动。
    1. 在“收件人”字段中添加“address”变量。
    2. 在“值”字段中添加表达式“arrayText(1)”。
  16. 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
    1. 在“收件人”字段中添加“city”变量。
    2. 在“值”字段中添加表达式“arrayText(2).Split(","c)(0)”。
  17. 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
    1. 在“收件人”字段中添加“phoneNumber”变量。
    2. 在“值”字段中添加表达式“arrayText(3).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(0)”。
  18. 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
    1. 在“收件人”字段中添加“invoiceNumber”变量。
    2. 在“值”字段中添加表达式“arrayText(3).Split(":"c)(1).Split({"INVOICE"},StringSplitOptions.None)(1).Split("#"c)(1)”。
  19. 添加另一个“分配”活动,并将其置于上一个“分配”活动之后。
    1. 在“收件人”字段中添加“vendor”变量。
    2. 在“值”字段中添加表达式“arrayText(arrayText.Count-5)”。
      图 2. 包含“分配”活动的序列概览

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

  27. 返回到“读取 PDF 文本”序列,并在“遍历循环”活动下方添加“写入文本文件”活动。
    1. 在“ 文件名 ” 字段中添加值"InvoiceDetails.txt"
    2. 在“文本”字段中添加表达式 "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.“遍历循环”容器概览

  28. 返回到“ 工作流”工作区。
  29. 通过“使用 OCR 读取 PDF”活动读取 PDF 文件。
    1. 打开“使用 OCR 读取 PDF”序列容器。
    2. 在序列中拖动“ 使用 OCR 读取 PDF” 活动。
      1. 在“ 文件名 ” 字段中添加值 "Invoice02.pdf"
      2. 在“属性”面板中,向“并行度”字段添加“1”值。
    3. Google OCR 引擎拖动到“ 使用 OCR 读取 PDF” 活动中。
      1. 在“ 属性 ”面板的“ 文本 ”字段中添加变量 extractedTextTesseract
    4. 拖动另一个“使用 OCR 读取 PDF”活动,并将其置于上一个“使用 OCR 读取 PDF”活动之后。
      1. 在“ 文件名 ” 字段中添加值 "Invoice02.pdf"
      2. 在“属性”面板中,向“并行度”字段添加“1”值。
    5. Microsoft OCR 引擎拖动到“ 使用 OCR 读取 PDF” 活动中。
      1. 在“ 属性 ”面板的“ 文本 ”字段中添加变量 extractedTextMicrosoft
    6. 将“ 写入文本文件 ”活动拖动到“ 使用 OCR 读取 PDF” 活动下方。
      1. 在“ 文件名 ” 字段中添加值 "OCRMicrosoft.txt"
      2. 在“文本”字段中添加“extractedTextMicrosoft”变量。
    7. 将“写入文本文件”活动拖动到上一个“ 写入 文本文件”活动下方。
      1. 在“ 文件名 ” 字段中添加值 "OCRTesseract.txt"
      2. 在“文本”字段中添加“extractedTextTesseract”变量。
        图 5. “使用 OCR 读取 PDF”活动概览

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

此页面有帮助吗?

获取您需要的帮助
了解 RPA - 自动化课程
UiPath Community 论坛
Uipath Logo White
信任与安全
© 2005-2024 UiPath。保留所有权利。