You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Robot Framework对比含文本图片的医疗PDF文档?

Robot Framework:如何对比包含医疗复杂内容的PDF文档?

问题描述

我正在使用Robot Framework,需要对比两份包含医疗细节(含表格、要点、数值、日期、图片等)的PDF文档。流程是输入医疗信息源文档后,系统生成其摘要文档,我需要将摘要文档与源文档进行对比。

我尝试使用DiffLibrary编写了如下代码,但无法正常工作:

*** Settings ***
Library SeleniumLibrary
Library DateTime
Library RequestsLibrary
Library Collections
Library String
Library DiffLibrary
Library OperatingSystem
Library BuiltIn
Library RPA.PDF

*** Test Cases ***
Compare Documents
    ${file1}  Open PDF     PDF_Files/SampleDoc1.pdf
    close pdf
    ${file2}  Open PDF    PDF_Files/SampleDoc2.pdf
    close pdf
    Run Keyword If    ${file1}    ===     ${file2}
    log to console    Both PDF documents are identical
    ELSE IF
    log to console    PDF documents are different
    END

请问是否有其他可用于对比PDF的库?若我的代码存在问题,请予以指导,感谢任何建议与帮助。


问题分析与解决方案

你的代码核心问题

  • Open PDF关键字返回的是PDF句柄对象,而非文档的实际内容,直接用===对比两个对象必然不相等,这是代码失效的根本原因。
  • 你没有提取PDF中的文本、表格等可对比内容,DiffLibrary也无法直接处理PDF句柄。

可行的PDF对比方案

方案1:基于RPA.PDF提取内容后对比

利用RPA.PDF提取文本、表格,再用DiffLibrary或内置关键字做对比,适合处理结构化医疗内容:

*** Settings ***
Library    RPA.PDF
Library    DiffLibrary
Library    String
Library    BuiltIn

*** Test Cases ***
Compare Medical PDF Content
    # 提取两份PDF的纯文本内容
    ${text1}    Get Text From PDF    PDF_Files/SampleDoc1.pdf
    ${text2}    Get Text From PDF    PDF_Files/SampleDoc2.pdf

    # 标准化文本(去除多余空格、统一日期格式,适配医疗文档特性)
    ${clean_text1}    Strip String    ${text1}
    ${clean_text1}    Replace String    ${clean_text1}    \n    ${EMPTY}
    ${clean_text2}    Strip String    ${text2}
    ${clean_text2}    Replace String    ${clean_text2}    \n    ${EMPTY}

    # 对比文本内容
    ${diff}    Get Diff    ${clean_text1}    ${clean_text2}
    Run Keyword If    '${diff}' != ''    Log To Console    PDF文本差异:\n${diff}
    ...    ELSE    Log To Console    PDF文本内容完全一致

    # 单独对比医疗表格
    ${tables1}    Get Tables From PDF    PDF_Files/SampleDoc1.pdf
    ${tables2}    Get Tables From PDF    PDF_Files/SampleDoc2.pdf
    Lists Should Be Equal    ${tables1}    ${tables2}    医疗表格内容不一致

方案2:调用系统工具做深度对比

针对含图片的PDF,可借助pdftotext等工具转文本后用系统diff命令对比,适合复杂格式场景:

*** Settings ***
Library    OperatingSystem

*** Test Cases ***
Compare PDF With External Tool
    # 将PDF转成临时文本文件
    Run Process    pdftotext    PDF_Files/SampleDoc1.pdf    temp_source.txt
    Run Process    pdftotext    PDF_Files/SampleDoc2.pdf    temp_summary.txt

    # 调用系统diff命令获取差异
    ${diff_result}    Run Process    diff    temp_source.txt    temp_summary.txt    return_stdout=True
    Run Keyword If    ${diff_result.returncode} != 0    Log To Console    PDF差异详情:\n${diff_result.stdout}
    ...    ELSE    Log To Console    PDF内容无差异

    # 清理临时文件
    Remove File    temp_source.txt
    Remove File    temp_summary.txt

方案3:专用PDF对比库

使用社区维护的PDFComparisonLibrary,支持布局、图片等复杂内容对比:

*** Settings ***
Library    PDFComparisonLibrary

*** Test Cases ***
Compare Complex Medical PDFs
    # 直接对比两份PDF,返回布尔值
    ${is_identical}    Compare PDFs    PDF_Files/SampleDoc1.pdf    PDF_Files/SampleDoc2.pdf
    Should Be True    ${is_identical}    医疗PDF文档存在差异(含布局、图片等)

额外注意事项

  • 医疗文档的日期、数值格式可能存在差异,对比前需用String库做标准化处理(如统一日期格式为YYYY-MM-DD)。
  • 图片对比可提取图片哈希值后做一致性校验,或借助视觉对比库将PDF转图片后逐页对比。

内容的提问来源于stack exchange,提问作者Sandaru Dissanayake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:44:59