У меня есть проект, который требует печати таблицы HTML с множеством строк.
Моя проблема в том, как таблица печатается на нескольких страницах. Иногда он будет разрезать строку пополам, делая ее нечитаемой, потому что одна половина находится на переднем крае страницы, а остальная часть напечатана в верхней части следующей страницы.
Единственное правдоподобное решение, которое я могу придумать, - это использовать сложенные DIV вместо таблицы и принудительно разрывать страницы, если это необходимо ... но, прежде чем пройти через все изменения, я подумал, что могу спросить здесь раньше.
<thead>
к вашей таблице следующий css,thead {display: table-header-group; }
чтобы напечатать заголовок таблицы на всех последующих страницах (полезно для более длинных таблиц данных).Ответы:
источник
Примечание: при использовании разрыва страницы: всегда для тега он создает разрыв страницы после последнего бита таблицы, каждый раз создавая полностью пустую страницу в конце! Чтобы это исправить, просто измените его на разрыва страницы: авто. Он будет правильно разорван и не создаст лишнюю пустую страницу.
источник
Расширение от решения Синан Юнюр:
Кажется, что
page-break-inside:avoid
в некоторых браузерах учитываются только для элементов блока, а не для ячейки, таблицы, строки или встроенного блока.Если попытаться
display:block
вTR
теге, и использовать тамpage-break-inside:avoid
, он работает, но мур вокруг с вашей сервировки стола.источник
$(document).ready(function(){$("table tbody th, table tbody td").wrapInner("<div></div>");});
tr { display: block; }
Только для печати», а не добавлять все посторонние<div>
элементы. (Не проверял, но стоит посмотреть)Ни один из ответов здесь не работал для меня в Chrome. AAverin на GitHub создал несколько полезных Javascript для этой цели, и это сработало для меня:
Просто добавьте js в ваш код и добавьте класс «splitForPrint» к вашей таблице, и он аккуратно разделит таблицу на несколько страниц и добавит заголовок таблицы на каждую страницу.
источник
splitForPrint
но в JS нигде не было ссылки на элемент с помощью classNamesplitForPrint
. Только часть, где,var splitClassName = 'splitForPrint';
но это все.Используйте эти свойства CSS:
Например:
через
источник
Я недавно решил эту проблему с хорошим решением.
CSS :
JS :
Работает как шарм!
источник
Я закончил тем, что следовал подходу @ vicenteherrera, с некоторыми изменениями (которые, возможно, специфичны для начальной загрузки 3).
В принципе; мы не можем разбить
tr
s илиtd
s, потому что они не являются элементами блочного уровня. Поэтому мы встраиваемdiv
s в каждый и применяем нашиpage-break-*
правила противdiv
. Во- вторых, мы добавляем некоторые отступы к вершине каждого из этих элементов, чтобы компенсировать любые артефакты моделирования.Корректировка полей и отступов была необходима, чтобы компенсировать какое-то дрожание, которое было введено (по моему предположению - из начальной загрузки). Я не уверен, что представляю какое-либо новое решение из других ответов на этот вопрос, но я думаю, что это может кому-то помочь.
источник
Я столкнулся с одной и той же проблемой и всюду ищу решение, наконец, я нашел то, что работает для меня для всех браузеров.
используйте этот CSS или вместо CSS вы можете иметь этот JavaScript
Надеюсь, это сработает и для вас.
источник
Я проверил много решений, и никто не работал хорошо.
Итак, я попробовал маленький трюк, и он работает:
tfoot со стилем:
position: fixed; bottom: 0px;
помещается внизу последней страницы, но если нижний колонтитул слишком высокий, он перекрывается содержимым таблицы.tfoot with only:
display: table-footer-group;
не перекрывается, но не находится внизу последней страницы ...Давайте поставим два tfoot:
Один резервирует место на не последних страницах, второй добавляет ваш обычный нижний колонтитул.
источник
Я перепробовал все предложения, приведенные выше, и нашел простое и работающее кросс-браузерное решение для этой проблемы. Для этого решения не требуется стили или разрыв страницы. Для решения формат таблицы должен быть таким:
Выше формат проверен и работает в кросс-браузерах
источник
Ну, ребята ... Большинство решений здесь не работали. Так вот как у меня все получалось ..
HTML
Первый набор заголовков используется как фиктивный, чтобы во время разрыва страницы не было отсутствующей верхней границы во 2-й главе (т.е. исходной голове).
источник
Принятый ответ не работал для меня во всех браузерах, но у меня работал следующий css:
Структура HTML была:
В моем случае были некоторые дополнительные проблемы с
thead tr
, но это решило изначальную проблему предотвращения разбивки строк таблицы.Из-за проблем с заголовками я в итоге получил:
Это не мешало ряду ломаться; только содержание каждой ячейки.
источник