扫描PDF搜不到文字?用OCR实现搜索和复制

发布时间:2026/10/22 7:28:34
扫描PDF搜不到文字?用OCR实现搜索和复制
扫描件能看见编号搜索却找不到通常要先检查有没有文字层。下面用一页教学PDF演示原件只有图像调用ComPDF生成新副本再核对中文、编号与金额。可下载教学输入、实际产物与示例代码对照检查。包内不含API密钥、SDK许可或SDK安装包。先确认输入再做OCR本次输入是一页由教学附件渲染成图像后制作的PDF不含客户资料。用PDF读取工具提取文字原件得到0个字符页面中的编号是DEMO-042合计是84.70。对于混合PDF应逐页检查。首页是扫描件不代表其他页也缺少文字有文字却搜索失败还可能涉及编码或文字内容错误。用ComPDF生成新副本可搜索PDF接口支持通过OCR处理扫描输入。先在服务端设置COMPDF_API_KEY准备scan.pdf再执行curl--fail-with-body--requestPOST\https://api-server.compdf.com/server/v2/process/pdf/editable\--headerx-api-key:$COMPDF_API_KEY\--formfilescan.pdf\--formenableOcr1\--outputresponse.json这一步得到的是JSON响应。检查业务状态和结果地址后再下载PDF不能把响应文件直接改名为PDF。本次同步请求返回成功下载得到一页PDF。importjsonfromurllib.requestimporturlopenfrompathlibimportPath payloadjson.loads(Path(response.json).read_text())ifstr(payload.get(code))!200:raiseRuntimeError(接口未成功先检查业务状态)datapayload[data]ifisinstance(data,list):datadata[0]ifdata.get(status)!success:raiseRuntimeError(转换尚未成功完成)withurlopen(data[downloadUrl],timeout60)asresponse:outputresponse.read()ifnotoutput.startswith(b%PDF-):raiseRuntimeError(下载内容不是PDF)Path(scan-searchable.pdf).write_bytes(output)示例使用官方海外节点实际节点应按账号和数据处理要求选择。原件保留处理结果另存。这份样本实际得到什么核对项原件ComPDF输出页数11可提取文字字符数0280编号DEMO-042无文字层可检索输出文字中存在合计84.70与零值0.00无文字层可检索输出文字中存在中文“教学附件”无文字层可检索输出文字中存在字符数是本次读取结果不是识别准确率。编号、金额和中文检查通过表格复制后的多行顺序仍有交错。归档搜索与结构化表格提取应分别验收不能把有文字层理解成已经还原表格结构。图左侧为实际OCR输出页面右侧为同一文件的文字层核对字符数不是识别准确率。接入前核对业务文件关闭原件打开输出分别搜索编号、金额与中文再复制同一行核对O与0、小数点、负号和空格。需要分发给他人时用接收方实际阅读器再检查一次。持续归档应覆盖本单位常见的低清晰度、倾斜和混合页面。可通过开发者试用入口验证授权样本记录需要人工复核的字段再确定批量处理和复核规则。