Текст режется по границам столбцов: соседние клетки бланка больше не попадают в один блок

Раньше сервис собирал абзац из слов, стоящих по разные стороны напечатанной линейки бланка: «Продавец … (2) Покупатель … (6)» оказывались одной строкой, а подписи десяти столбцов товарной таблицы — одним блоком. Теперь линейки бланка используются как границы: строка, написанная в двух клетках, делится на два блока. Ниже — прогон по всем пяти документам заказчика: одна и та же страница, один и тот же движок, разница только в резке.

38 → 7
блоков, которые пересекали границу столбца, на 8 страницах
1 → 1
блоков, где в одной строке стояли номера двух разных клеток бланка
95 → 220
текстовых блоков: то же содержимое, разложенное по клеткам
8 из 8
страниц, где текст после резки совпал слово в слово с тем, что было

По каждой странице

ДокументСтр.Границ столбцовБлоков текста до → послеПересекали границу до → послеДва номера клеток в строке до → послеСлова целы
Пример 112012 → 537 → 10 → 0да
Пример 122118 → 355 → 10 → 0да
Пример 211719 → 276 → 00 → 0да
Пример 221619 → 377 → 50 → 0да
Пример 31187 → 92 → 01 → 1да
Пример 41175 → 172 → 00 → 0да
Пример 511711 → 367 → 00 → 0да
Пример 5244 → 62 → 00 → 0да

«Границ столбцов» — сколько вертикальных линеек бланка нашлось на странице; по ним и режется текст. «Пересекали границу» — блоки, внутри рамки которых проходит линейка на всю их высоту: значит блок стоит сразу в двух клетках. «Два номера клеток в строке» — тот же дефект, видимый прямо в тексте, без картинки.

Как это выглядит на скане

найденные границы столбцовблок, пересекавший границу (было)блоки после резки (стало)

Пример 1, страница 1

Пример 1: блоки, пересекающие границы столбцов
Было: красным обведены блоки, в которые попал текст сразу из нескольких клеток бланка.
Пример 1: блоки после резки по границам столбцов
Стало: тот же кусок страницы, каждый блок стоит внутри своего столбца.

Пример 2, страница 2

Пример 2: блоки, пересекающие границы столбцов
Было: красным обведены блоки, в которые попал текст сразу из нескольких клеток бланка.
Пример 2: блоки после резки по границам столбцов
Стало: тот же кусок страницы, каждый блок стоит внутри своего столбца.

Пример 3, страница 1

Пример 3: блоки, пересекающие границы столбцов
Было: красным обведены блоки, в которые попал текст сразу из нескольких клеток бланка.
Пример 3: блоки после резки по границам столбцов
Стало: тот же кусок страницы, каждый блок стоит внутри своего столбца.

Пример 4, страница 1

Пример 4: блоки, пересекающие границы столбцов
Было: красным обведены блоки, в которые попал текст сразу из нескольких клеток бланка.
Пример 4: блоки после резки по границам столбцов
Стало: тот же кусок страницы, каждый блок стоит внутри своего столбца.

Пример 5, страница 1

Пример 5: блоки, пересекающие границы столбцов
Было: красным обведены блоки, в которые попал текст сразу из нескольких клеток бланка.
Пример 5: блоки после резки по границам столбцов
Стало: тот же кусок страницы, каждый блок стоит внутри своего столбца.

Что было склеено и как разошлось

Пример 1, страница 1 — было 7 таких блоков, например:

универсальный Приложение № 1 к постановлению Правительства Российской Федерации от 26 декабря 2011 г. № 1137

Пример 1, страница 2 — было 5 таких блоков, например:

- `

Пример 2, страница 1 — было 6 таких блоков, например:

Универсальный Счет-фактура № 4 от 16 января 2025 г. (1) Приложение № 1 кпостановления Прави‘ольстья Рослийсткий федерации, от 26 декабря 2011 ©. Ne 1137

Пример 2, страница 2 — было 7 таких блоков, например:

Регистрационный

Пример 3, страница 1 — было 2 таких блоков, например:

= Универсальный | Счет-фактура № 186

Пример 4, страница 1 — было 2 таких блоков, например:

pte meg Vane ры Se ee es Oe ee is (в редакции постановления Правительства Российской Федерации от 2 апреля 2021 г, № 534)

Пример 5, страница 1 — было 7 таких блоков, например:

Универсальный Счет-фактура № 1189/4 от 20 февраля 2025 г. Приложение N 1 к постановлению Правительства Российской Федерации от 26.12.2011 №1137

Пример 5, страница 2 — было 2 таких блоков, например:

Документ Главный бухгалтер

Как это устроено

Что осталось прежним

Прогон: bench/step3. Замер «до» повторяет замер первого шага и считается тем же кодом.