feat: layered precise generation for A4 report images

3-phase pipeline to solve LLM prompt overflow from too many OCR elements:
Phase 1 (generate_skeleton): compressed layout schema → skeleton JRXML
Phase 2 (refine_layout): sampled coordinates → pixel-level position tuning
Phase 3 (map_fields): OCR field names → replace $F{field_N} placeholders

Only triggered when layout_schema.total_rows > 0 on initial_generation intent.
Text requests and all other intents are unaffected (zero behavior change).
This commit is contained in:
2026-05-21 08:34:32 +08:00
parent 9bb011e429
commit 43a0542a11
14 changed files with 882 additions and 81 deletions
+16
View File
@@ -0,0 +1,16 @@
你是一位资深 JasperReports 工程师。当前有一个 JRXML 使用占位字段名($F{field_1}, $F{field_2}, ...),需要替换为从 OCR 提取的真实字段名。
关键规则:
- 只输出完整修改后的 JRXML 代码,不要解释,不要 markdown 标记。
- 将每个 $F{field_N} 占位符替换为 OCR 提取结果中对应的真实字段名。
- 替换规则:根据列的顺序映射——$F{field_1} 对应第 1 列的 OCR 字段名,$F{field_2} 对应第 2 列,以此类推。
- 同时更新 <field name="..."> 声明和所有 $F{...} 表达式中的引用。
- 如果 OCR 提取的字段数少于占位字段数,保留多余的占位字段。
- 不要修改 band 结构、元素位置或大小。
- 确保 JRXML 兼容 JasperReports 7.0.6。
当前 JRXML(含占位字段):
{current_jrxml}
OCR 提取的结构化字段:
{ocr_fields}
+4 -1
View File
@@ -20,7 +20,10 @@ _NAME_MAP = {
"modification": "modification.md",
"correction": "correction.md",
"explain_error": "explain_error.md",
"compression": "compression.md",
"compression": "compression.md",
"skeleton_generation": "skeleton_generation.md",
"refine_layout": "refine_layout.md",
"field_mapping": "field_mapping.md",
}
+17
View File
@@ -0,0 +1,17 @@
你是一位资深 JasperReports 工程师。当前有一个骨架 JRXML,需要根据精确的像素坐标调整每个元素的位置。
关键规则:
- 只输出完整修改后的 JRXML 代码,不要解释,不要 markdown 标记。
- 根据提供的采样坐标,精确调整每个 textField/staticText 的 x, y, width, height。
- 表头行的坐标直接使用采样坐标中 header_row 对应列的 x, y, width, height。
- 数据行:根据 first_data_row 的坐标模式,向下插值生成剩余数据行(每行 y 递增行高)。
- 标题行(如有)和表尾行:保持其在骨架中的 y 位置大致不变,但调整 x 和 width 与列的采样坐标对齐。
- 不要修改字段名(保持 $F{field_N} 占位名不变)。
- 不要修改 band 结构。
- 确保 JRXML 兼容 JasperReports 7.0.6。
当前骨架 JRXML
{current_jrxml}
采样坐标(表头行 + 第一行数据行,像素位置):
{sampled_coordinates}
+19
View File
@@ -0,0 +1,19 @@
你是一位资深 JasperReports 工程师。根据以下报表布局描述和用户需求,生成一个完整的骨架 JRXML 文件。
关键规则:
- 只输出 JRXML 代码,不要解释,不要 markdown 标记。
- 使用 $F{field_1}, $F{field_2}, ... 作为占位字段名,并在 <field> 部分声明它们。
- 报表结构必须正确(title, pageHeader, columnHeader, detail, pageFooter 等 band)。
- 元素位置使用近似值即可,后续会精确调整。
- 根元素为 <jasperReport>,包含正确的 xmlns 属性。
- 包含 <queryString>,在 <![CDATA[...]]> 中放置占位 SQLSELECT * FROM table_name)。
- 确保 JRXML 兼容 JasperReports 7.0.6。
报表布局描述:
{layout_schema}
参考模板和组件:
{context}
用户需求:
{user_request}