fix image

This commit is contained in:
2026-03-25 13:38:54 +05:00
parent c33befe7c2
commit afe91432dc
5 changed files with 64 additions and 17 deletions

View File

@@ -69,7 +69,7 @@ def load_table3(path: str):
scales = {} # zu_name → масштаб (строка из c1 третьей строки блока)
for i, row in enumerate(ws.iter_rows(values_only=True), start=1):
zu_name = row[5] if len(row) > 5 else None
if zu_name and str(zu_name).strip().startswith("выявл"):
if zu_name and str(zu_name).strip():
zu_name = str(zu_name).strip()
zu_by_row[i] = zu_name
# масштаб — третья строка блока (header+2)

View File

@@ -3,6 +3,7 @@
import copy
import datetime
import io
from pathlib import Path
from openpyxl import load_workbook
from openpyxl.drawing.image import Image as XlImage
@@ -225,12 +226,26 @@ def _embed_image(ws, png_bytes: bytes, anchor_row: int, pre_rows: int) -> int:
# В отличие от TwoCellAnchor, LibreOffice не пересчитывает позицию
# через сумму высот строк → картинка не уплывает вверх при склейке форм.
img = XlImage(io.BytesIO(png_bytes))
cell_anchor = OneCellAnchor()
cell_anchor._from = AnchorMarker(col=0, colOff=0, row=anchor_row - 1, rowOff=0)
cell_anchor.ext.cx = int(pt_w * 12700) # pt → EMU
cell_anchor.ext.cy = int(pt_h * 12700)
img.anchor = cell_anchor
ws.add_image(img)
# Установим размер картинки в пикселях с учётом масштабирования
scale = 1.0
if pt_w > MAX_PT_W:
scale = MAX_PT_W / pt_w
img.width = int(px_w * scale)
img.height = int(px_h * scale)
# Добавляем изображение привязкой к ячейке A{anchor_row}
try:
ws.add_image(img, f"A{anchor_row}")
except Exception:
try:
cell_anchor = OneCellAnchor()
cell_anchor._from = AnchorMarker(col=0, colOff=0, row=anchor_row - 1, rowOff=0)
cell_anchor.ext.cx = int(pt_w * 12700) # pt → EMU
cell_anchor.ext.cy = int(pt_h * 12700)
img.anchor = cell_anchor
ws.add_image(img)
except Exception:
pass
return -rows_to_delete # отрицательное смещение: строки были удалены

View File

@@ -38,7 +38,7 @@ def build_coord_rows(contours: list, method: str, mt) -> list:
или None — пустой разделитель между контурами.
Правила:
- Первая координата MIF → X (колонка C), вторая → Y (D).
- Первая координата MIF → Y (колонка D), вторая → X (C).
- Все точки нумеруются подряд по всем контурам.
- Последняя (замыкающая) точка контура получает номер первой точки этого контура.
"""
@@ -49,11 +49,24 @@ def build_coord_rows(contours: list, method: str, mt) -> list:
rows.append(None)
if not contour:
continue
first_num = global_num
for mx, my in contour[:-1]:
# Single-point contour — добавляем одну строку
if len(contour) == 1:
my, mx = contour[0] # MIF: первая=Y(восток), вторая=X(север)
rows.append((global_num, f"{mx:.2f}", f"{my:.2f}", method, mt))
global_num += 1
continue
# Для многоточечных контуров: нумеруем все точки, кроме последней,
# затем добавляем завершающую точку, которой присваивается номер
# первой точки контура (замыкание).
first_num = global_num
for my, mx in contour[:-1]: # MIF: первая=Y(восток), вторая=X(север)
rows.append((global_num, f"{mx:.2f}", f"{my:.2f}", method, mt))
global_num += 1
if len(contour) >= 2:
mx, my = contour[-1]
my, mx = contour[-1] # MIF: первая=Y(восток), вторая=X(север)
rows.append((first_num, f"{mx:.2f}", f"{my:.2f}", method, mt))
return rows