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

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

22 → 1
блоков, склеивших две соседние строки таблицы, на 8 страницах
3 → 3
блоков, склеивших два соседних столбца: прежнее качество разреза по столбцам
220 → 255
текстовых блоков: то же содержимое, разложенное по строкам
8 из 8
страниц, где текст после резки совпал слово в слово с тем, что было

Счёт склеек намеренно строгий: он смотрит на все слова страницы, чьи середины попали в рамку блока, — даже на те, что в сам блок не входят. Единственный оставшийся случай (1 из 22) именно такой: весь текст блока стоит по одну сторону линейки, а с другой стороны в рамку заглянуло слово соседнего блока. По собственному содержимому блоков склеек соседних строк не осталось: 22 → 0. Разбор по словам — ниже.

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

ДокументСтр.Линий строкБлоков текста
до → после
Склеивали две строки
до → после
Задевали линейку строки
до → после
Склеивали два столбца
до → после
Задевали границу столбца
до → после
Слова целы
Пример 112653 → 7012 → 012 → 00 → 01 → 2да
Пример 122135 → 350 → 00 → 00 → 01 → 1да
Пример 211927 → 281 → 01 → 00 → 00 → 0да
Пример 222437 → 477 → 18 → 23 → 35 → 6да
Пример 31229 → 111 → 01 → 20 → 00 → 0да
Пример 411817 → 170 → 00 → 00 → 00 → 0да
Пример 513136 → 360 → 00 → 00 → 00 → 0да
Пример 52156 → 111 → 01 → 00 → 00 → 0да
Итого8220 → 25522 → 123 → 43 → 37 → 98 из 8

«Линий строк» — сколько горизонтальных линеек бланка нашлось на странице; по ним и режется текст. «Склеивали две строки» — главный счёт: линейка проходит внутри рамки блока по всей его ширине И текст есть по обе стороны от неё, то есть в блок попали две соседние строки таблицы. «Задевали линейку» — линейка в рамку попала, но текста по обе стороны нет: делить там нечего. Те же два счёта посчитаны и для вертикальных линеек — они показывают, что прежнее качество разреза по столбцам не испортилось.

Число блоков, задевающих границу столбца, выросло (7 → 9) — это свойство самого счёта, а не ухудшение: разрезанный по строкам блок становится ниже, и вертикальная линейка начинает закрывать его по всей высоте, хотя весь текст блока стоит по одну её сторону. Склеек — там, где текст действительно с двух сторон, — не прибавилось: 3 → 3.

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

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

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

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

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

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

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

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

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

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

Что было склеено

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

Счет-фактура № ne Исправление № Продавец: Адрес: ИННКПП продавца: Грузоотправитель и его адрес: Наименование товара | (описание выполненных

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

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

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

raph $) единицу. |Измерения| (Mo)

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

ре SOO = ° atone fom Я ty oo |

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

Товар (груз) передал/услуги, ГЕНЕРАЛЬНЫЙ (должность) Дата ‘отгрузки, передачи Иные сведения 06 oTrpy3ke, (ссылки Р/с 40702810040000062982 Ответственный за правильность ГЕНЕРАЛЬНЫЙ (должность) Наименов

Что осталось

Пример 2, страница 2 — 1 блок(а):

paicrseHio иные документы ит:п;) = | = енной жизни би

Разбор по словам: весь текст этого блока стоит выше линейки, двух строк таблицы в нём нет. В счёт он попал потому, что счёт строгий — он смотрит на все слова страницы, чьи середины оказались внутри рамки блока. Внутрь рамки заглянуло чужое слово с другой стороны линейки ((ф:иго.:)) — оно принадлежит соседнему блоку и в содержимое этого не входит. По собственному содержимому блоков склеек соседних строк не осталось ни одной.

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

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

Замер «до» — работа сервиса как сейчас (резка только по столбцам), замер «после» — с резкой по строкам; обе цифры сняты на одной и той же странице одним и тем же движком (прогон bench/rezka-strok).