如何用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
相关产品推荐
相关产品推荐

