Коротко — это поведение не «баг» docx, а поведение Word при разрыве строки/ячейки: когда строка/ячейка переносится на следующую страницу, продолжение наследует границы ячейки, и Word не «додумывает» и не дорисовывает снизу/сверху новую линию. Поэтому простые трюки с прозрачным/нулевым/белым бордером не сработают — Word просто рисует то, что задано в свойствах ячейки/строки.
Варианты обхода (практические решения)
1) Запретить разрыв строки (самое простое, если вас устраивает, что строка уйдёт целиком на следующую страницу)
- В docx есть опция cantSplit у TableRow — установите её в true. Тогда строка не будет разбиваться по страницам и граница останется целой.
Пример:
```js
const row = new TableRow({
cantSplit: true,
children: [ /* TableCell ... */ ],
});
```
(Имя опции может незначительно отличаться в разных версиях, но в основе — запись <w:cantSplit/> в trPr.)
2) Сделать границу таблицы «между строками» (table-level inside horizontal)
- Если вы хотите, чтобы при переносе «между» страницами появлялась линия, задайте внутри таблицы горизонтальную границу (insideHorizontal / insideH). Табличная внутренняя граница рисуется между строками и сохраняется при переносе страниц.
Пример (docx):
```js
const table = new Table({
rows: [...],
borders: {
top: { style: BorderStyle.SINGLE, size: 6, color: "000000" },
bottom: { style: BorderStyle.SINGLE, size: 6, color: "000000" },
left: { style: BorderStyle.SINGLE, size: 6, color: "000000" },
right: { style: BorderStyle.SINGLE, size: 6, color: "000000" },
insideHorizontal: { style: BorderStyle.SINGLE, size: 6, color: "000000" }, // <-- важная часть
insideVertical: { style: BorderStyle.SINGLE, size: 6, color: "000000" },
},
});
```
Минус: insideHorizontal будет применяться ко всем межстрочным разделителям таблицы, не только к тем, где раньше были «пустые» границы.
3) Разбивать содержимое «вручную»
- Если вы заранее знаете, какие строки потенциально будут переливаться, создавайте их как две строки (верхняя с нижней границей, нижняя с верхней). Это даёт полный контроль, но требует логики деления содержимого и не работает для непредсказуемых переносов.
4) Постобработка (XML) — сложнее и ненадёжно
- Теоретически можно генерировать docx и править его XML, но это сложный путь и не гарантирует корректного поведения Word при пагинации.
Резюме и рекомендация
- Если можно — используйте cantSplit на строках, которые не должны расщепляться.
- Если нужно, чтобы разделительная линия всегда была, используйте table-level insideHorizontal (возможно с дополнительной корректировкой отдельных ячеек).
- Если нужен тонкий контроль только для некоторых мест — придётся заранее структурировать/разбивать строки вручную.
Если пришлёте фрагмент кода, где вы строите таблицу (версия docx тоже укажите), я подскажу точный синтаксис для вашей версии и предложу наилучшее место, где применить cantSplit или задать insideHorizontal.