Разбивку внутри ячейки ищет одно и то же правило, и оно повторяется: нашли линейки внутри ячейки — режем ячейку по ним и в каждом куске ищем заново, пока линейки находятся. Два, три, четыре уровня разбираются одинаково, отдельного кода на «ещё один уровень» нет. Ниже — что видно на рабочей ссылке своими глазами и чем ограничен спуск, чтобы он не ушёл по кругу.
Открыт рабочий адрес приложения, взят «Пример 2» (перекошенный документ с разбивкой внутри ячеек), включена вкладка «После выравнивания». Проверено в браузере, обе страницы:
| Страница | Линий внешней таблицы | Линий внутри ячеек | Ячеек с разбивкой | Каждая внутренняя линия лежит в своей ячейке | Подпись под переключателем |
|---|---|---|---|---|---|
| 1 | 34 | 3 | 3 | 3 из 3 | «Внутри ячеек нашлась своя разбивка: ячеек 3, линий в них 3» |
| 2 | 17 | 2 | 1 | 2 из 2 | «Внутри ячеек нашлась своя разбивка: ячеек 1, линий в них 2» |
Ни одна внутренняя линия не вышла за края скана. Под переключателем видна подпись «внешняя таблица / разбивка внутри ячейки». Щелчок по рамке на скане по-прежнему подсвечивает значение справа. Ошибок на странице нет.
На пяти ваших сканах внутри ячеек нарисован один уровень разбивки — глубже на бланках линий просто нет, и придумывать их нечем. Поэтому на живой ссылке видно ровно один уровень: это честная картина документа, а не потолок разбора.
Что разбор идёт глубже, проверено на настоящей странице «Примера 2»: в одну её ячейку (203 на 42 точки) дорисованы три линейки одна внутри другой — вертикальная делит ячейку пополам, горизонтальная делит левую половину, ещё одна вертикальная делит левую верхнюю четверть. Разбор нашёл все три уровня, каждый — внутри области предыдущего:
| Уровень | Область, в которой искали | Что нашли |
|---|---|---|
| 1 | вся ячейка: 261, 427 — 464, 469 | вертикальная линия на 362 |
| 2 | левая половина: 261, 427 — 362, 469 | горизонтальная линия на 448 |
| 3 | левая верхняя четверть: 261, 427 — 362, 448 | вертикальная линия на 311 |
Такой лист данными заказчика не является и в набор примеров не кладётся — он нужен только для проверки. Загрузить его на живой сервис через «Загрузить файл» и увидеть уровни на экране не получилось: уменьшенная копия страницы разбирается как другая таблица, и нужной ячейки в ней уже нет. Поэтому три уровня показаны замером разбора, а не снимком экрана.
Автоматическая проверка держит это на семи случаях: один уровень, три уровня, четыре уровня, частая сетка 10 на 10 (спуск кончается, область дважды не разбирается), упор в предел глубины, повтор той же области, и пересчёт координат наружу. Все семь проходят.
Разбор таблиц, подготовка сканов и движок распознавания не менялись — поиск разбивки только смотрит внутрь уже найденных ячеек на самой картинке.