快速结论:用 MinerU OCR 模型解析含大表格的 PDF 时,若“跳转到原文”高亮、分块缩略图或按需裁剪区域出现整体比例偏移,通常说明后端把 MinerU 返回的 0–1000 归一化 bbox 直接当成 PDF 页面坐标写入了 positions / _pdf_positions,优先排查 Go 侧 mineruBBoxPosition 是否做了坐标换算。
适用环境:已确认:RAGFlow 源码提交 4e240ab24(分支 fix/paddleocr-pdf-highlights,基于 upstream/main,合并提交 3c79c1958);Go 摄取链路、PDF 解析、MinerU OCR 模型。相关症状在 v0.25.1 / v0.26.2 上有报告。Issue 未提供操作系统、Python、CUDA、显卡信息。
最快修复方案:升级到包含 #21267 的 main 分支构建;该修复让 mineruBBoxPosition 用 middle.json 中的 page_size 把 0..1000 的 content_list bbox 换算为 PDF 点坐标后再写入位置字段。
注意事项:该结论来自源码审查与已有症状报告 #16268 的对照,并非在真实 MinerU 服务上复现验证;不同 MinerU 版本 content_list.json 的 bbox 空间可能不同(0–1000、0–1 或原始像素),升级后仍需确认所使用的 MinerU 版本与 middle.json 是否提供有效 page_size,缺失时坐标可能仍不可用。
问题场景
用户在 RAGFlow 中配置 MinerU OCR 模型并解析 PDF(尤其是包含宽表或大表格的文档)后,前端“跳转到原文”的高亮框、分块缩略图以及按需裁剪页面区域出现整体偏移。偏移表现为坐标被乘以一个固定比例,与页面实际内容位置不吻合。用户看到的不是坐标缺失,而是坐标数值错误;重新解析同一文件仍会复现。
报错原文
[Bug]: MinerU PDF positions are emitted in the service's normalized bbox space instead of PDF page space
The offset appears to be multiplied by a fixed scaling factor, as if bounding box coordinates are not being correctly converted to display coordinates
原因分析
最可能的原因:Go 摄取链路中的 mineruBBoxPosition(internal/ingestion/component/pdf_vision_dispatch.go)仅把 MinerU 的 0 基 page_idx 转为 1 基页码、重排 bbox 顺序,就直接返回 [page, left, right, top, bottom],全程没有按页面尺寸做缩放。MinerU 的 content_list.json bbox 是 0–1000 归一化坐标,而下游消费者按 PDF 点(72 dpi 页面尺寸)解释这些值,因此写入 _pdf_positions 和 positions 的坐标与真实页面位置存在比例偏差。
Python 侧的 deepdoc/parser/mineru_parser.py 已有 _content_bbox_to_page_space 和 _middle_bbox_to_page_space 做换算,并分别处理 0–1000 归一化、0–1 归一化与源像素三种情况,在页面尺寸缺失或无效时打印警告;Go 路径缺少对应逻辑,导致同一条链路上两条解析路径行为不一致。该判断基于源码审查与 #16268 的症状对照,未在实际 MinerU 服务上复现。
环境排查
- 确认 RAGFlow 版本或提交号是否包含 #21267;若未包含,则问题大概率仍存在。
- 确认解析 PDF 使用的是 MinerU OCR 模型路径,而非 PaddleOCR 或
pdf_parser_paddleocr.go相关路径(后者已用pdfium.PageSizes做换算)。 - 确认所用 MinerU 版本的
content_list.jsonbbox 是 0–1000 归一化、0–1 归一化还是源像素,这决定换算系数。 - 确认
middle.json中是否存在有效page_size;缺失或无效时换算无法进行。 - Issue 未提供操作系统、Python、CUDA、PyTorch、显卡版本信息,无需以这些版本作为排查前置条件。
解决步骤
- 先判定是否为同一问题:解析一份已知页面尺寸、含大表格的 PDF,核对保存的
positions/_pdf_positions数值。若数值落在 0–1000 范围而页面尺寸明显大于该范围,基本可确认坐标未换算。 - 更新到包含 #21267 的 main 分支构建,使
mineruBBoxPosition按middle.json的page_size把 0..1000 的content_listbbox 换算为 PDF 点坐标。 - 若无法立即升级,可按 Python 侧
_content_bbox_to_page_space的逻辑自行在 Go 路径中补换算:左/右按宽度、上/下按高度分别乘以页面尺寸除以 1000,并保证输出仍为 1 基页码的[page, left, right, top, bottom]。此项为根据 Issue 期望行为的推导,可优先尝试。 - 当无法确定 bbox 空间或页面尺寸缺失时,按 Python 侧行为记录警告,而不是静默写入不可用坐标。
- 重新解析受影响的 PDF,不要仅依赖旧解析结果;已有的错误坐标不会自动更正。
验证方法
重新解析同一份含大表格的 PDF 后,检查 positions / _pdf_positions 是否与页面点坐标量级一致(而非集中在 0–1000);在前端验证“跳转到原文”高亮框、分块缩略图和按需裁剪区域是否与原文位置吻合,重点观察宽表区域。若坐标仍按固定比例整体偏移,说明换算未生效或页面尺寸取值有误,需继续核对 MinerU 版本对应的 bbox 空间。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[HELP?]: 1.180.0 llama server failed to start](https://www.chat-gpts.plus/wp-content/uploads/2026/10/6837-19037eb5-768x403.jpg)
![[Bug] After a provider error, entering an agent's chat from Home stays on the errored conversation instead of a New Topic state](https://www.chat-gpts.plus/wp-content/uploads/2026/10/21654-2b39bcc0-768x403.jpg)
![[Question]: Auto metadata settings have no effect](https://www.chat-gpts.plus/wp-content/uploads/2026/10/13736-e2d4d4bd-768x403.jpg)