diff --git a/klausur-service/backend/cv_box_layout.py b/klausur-service/backend/cv_box_layout.py index 15f796f..9b72daa 100644 --- a/klausur-service/backend/cv_box_layout.py +++ b/klausur-service/backend/cv_box_layout.py @@ -176,7 +176,11 @@ def build_box_zone_grid( w.get("text", "") for w in sorted(zone_words, key=lambda ww: (ww["top"], ww["left"])) ).strip() return { - "columns": [{"col_index": 0, "index": 0, "label": "column_text", "col_type": "column_1"}], + "columns": [{"col_index": 0, "index": 0, "label": "column_text", "col_type": "column_1", + "x_min_px": box_x, "x_max_px": box_x + box_w, + "x_min_pct": round(box_x / img_w * 100, 2) if img_w else 0, + "x_max_pct": round((box_x + box_w) / img_w * 100, 2) if img_w else 0, + "bold": False}], "rows": [{"index": 0, "row_index": 0, "y_min": box_y, "y_max": box_y + box_h, "y_center": box_y + box_h / 2, "y_min_px": box_y, "y_max_px": box_y + box_h, @@ -199,7 +203,14 @@ def build_box_zone_grid( if layout_type in ("flowing", "bullet_list"): # Force single column — each line becomes one row with one cell lines = _group_into_lines(zone_words) - column = {"col_index": 0, "index": 0, "label": "column_text", "col_type": "column_1"} + # Column needs x_min_px/x_max_px for GridTable width calculation + column = { + "col_index": 0, "index": 0, "label": "column_text", "col_type": "column_1", + "x_min_px": box_x, "x_max_px": box_x + box_w, + "x_min_pct": round(box_x / img_w * 100, 2) if img_w else 0, + "x_max_pct": round((box_x + box_w) / img_w * 100, 2) if img_w else 0, + "bold": False, + } rows = [] cells = []