Я использую свойство CSS,
Если я использую page-break-after: always;
=>, он печатает лишнюю пустую страницу перед
Если я использую page-break-before: always;
=>, он печатает лишнюю пустую страницу после. Как этого избежать?
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
.print{
page-break-after: always;
}
</style>
<script type="text/javascript">
window.print();
</script>
</head>
<body>
<div class="print">fd</div>
<div class="print">fdfd</div>
</body>
</html>
<div>This page intentionally left blank.</div>
Ответы:
Вы могли бы добавить
.print:last-child { page-break-after: auto; }
поэтому последний
print
элемент не получит лишнего разрыва страницы.Обратите внимание, что селектор: last-child не поддерживается в IE8, если вы нацелены на этого негодяя браузера.
источник
Вы пробовали это?
@media print { html, body { height: 99%; } }
источник
height: 100%
. Я смог отменить это с помощьюheight: auto
height: auto;
это более элегантно, чемheight: 99%;
Мне помогло описанное здесь решение ( ссылка на веб-архив ).
Прежде всего, вы можете добавить границу ко всем элементам, чтобы увидеть, что вызывает добавление новой страницы (возможно, некоторые поля, отступы и т. Д.).
div { border: 1px solid black;}
И само решение заключалось в добавлении следующих стилей:
html, body { height: auto; }
источник
если ничего из этого не работает, попробуйте это
@media print { html, body { height:100vh; margin: 0 !important; padding: 0 !important; overflow: hidden; } }
убедитесь, что это 100vh
источник
Это работает для меня
.print+.print { page-break-before: always; }
источник
Если вы просто хотите использовать CSS и хотите избежать разрыва страницы, используйте
.print{ page-break-after: avoid; }
Взгляните на страничные медиа
Вы можете использовать эквиваленты скриптов для pageBreakBefore и pageBreakAfter, динамически присваивая их значения. Например, вместо того, чтобы заставлять посетителей разрывать страницы, вы можете создать сценарий, чтобы сделать это необязательным. Здесь я создам флажок, который переключает между нарезкой страницы по заголовкам (h2) и по собственному усмотрению принтера (по умолчанию):
<form name="myform"> <input type="checkbox" name="mybox" onClick="breakeveryheader()"> </form> <script type="text/javascript"> function breakeveryheader(){ var thestyle=(document.forms.myform.mybox.checked)? "always" : "auto" for (i=0; i<document.getElementsByTagName("H2").length; i++) document.getElementsByTagName("H2")[i].style.pageBreakBefore=thestyle }
Щелкните здесь, чтобы увидеть пример, в котором это используется. Вы можете заменить H2 внутри скрипта другим тегом, например P или DIV.
http://www.javascriptkit.com/dhtmltutors/pagebreak.shtml
источник
Не знаю (пока) почему, но помогло вот это:
@media print { html, body { border: 1px solid white; height: 99%; page-break-after: avoid; page-break-before: avoid; } }
Надеюсь, что кто-то спасет свои волосы, пока борется с проблемой ...;)
источник
Похоже, есть много возможных причин, и вероятная причина заключается в том, что тег body имеет высоту, которая считается слишком большой по w / e причине.
Моя причина:
min-height: 100%
в базовой таблице стилей.Мое решение:
min-height: auto
в@media print
директиве.Обратите внимание:
auto
согласно PhpStorm , это значение не было правильным. Однако, согласно документации Mozilla по min-height , это правильно :источник
initial
подумал, так как предполагал, что это будет проблематично для элементов с динамическим размером. Обратите внимание, что начальное значение равно 0, поэтому я все еще предполагаю, чтоauto
это обычно более полезно.устанавливается
display:none
для всех остальных элементов, не предназначенных для печати. настройкаvisibility:hidden
будет держать их скрытыми, но все они все еще там и заняли место для них. пустая страница предназначена для этих скрытых элементов.источник
В моем случае помогла установка ширины для всех div:
.page-content div { width: auto !important; max-width: 99%; }
источник
Я изменил отображение css и свойство ширины области печати
#printArea{ display:table; width:100%; }
источник
У меня была аналогичная проблема, но причина была в том, что у меня было поле 40 пикселей внизу страницы, поэтому самая последняя строка всегда переносилась, даже если на последней странице было место для нее. Не из-за какой-либо команды
page-break-*
css. Я исправил, удалив поле на печати, и все заработало. Просто хотел добавить свое решение на случай, если у кого-то есть что-то подобное!источник
После борьбы с различными настройками и высотой разрыва страниц и миллионом различных правил CSS для тега body я, наконец, решил эту проблему через год.
У меня есть div, который должен быть единственным печатаемым элементом на странице, но после него я получал несколько пустых страниц. Мой тег тела установлен на,
visibility:hidden;
но этого было недостаточно. Вертикально высокие элементы страницы по-прежнему занимают «место». Поэтому я добавил это в свои правила CSS для печати:для таргетинга на определенные блоки div по их идентификаторам, которые содержат высокие элементы макета страницы. Я уменьшил высоту, а затем удалил их из макета. Больше никаких пустых страниц. Спустя годы я счастлив сказать своему клиенту, что я его взломал. Надеюсь, это кому-то поможет.
источник
visibility: hidden;
он все равно будет занимать место. При использованииdisplay: none;
пространство будет удалено. В этот момент вам не нужно будет специально устанавливать высоту, просто к вашему сведению.Похоже, что в Chrome есть ошибка, из-за которой в определенных ситуациях скрытие элементов после загрузки с помощью display: none оставляет много дополнительного места. Я предполагаю, что они вычисляют высоту документа до того, как документ будет отрисован. Chrome также запускает 2 события смены носителя и не поддерживает onbeforeprint и т. Д. Они в основном являются печатью. Вот мой обходной путь:
@media print { body { display: none; } } body.printing { display: block; }
Вы даете body class = "Printing" в готовом документе, и это включает стили печати. Эта система позволяет модульность стилей печати и предварительный просмотр печати в браузере.
источник
Добавьте этот CSS на ту же страницу, чтобы расширить файл CSS.
<style type="text/css"> <!-- html, body { height: 95%; margin: 0 0 0 0; } --> </style>
источник
Я пробовал все решения, у меня это работает:
<style> @page { size: A4; margin: 1cm; } .print { display: none; } @media print { div.fix-break-print-page { page-break-inside: avoid; } .print { display: block; } } .print:last-child { page-break-after: auto; } </style>
источник
Я только что столкнулся со случаем, когда переход с
</div> <script src="addressofjavascriptfile.js"></script> </body> </html>
к
<script src="addressofjavascriptfile.js"></script> </div> </body> </html>
исправил эту проблему.
источник
.print:last-child{ page-break-after: avoid; page-break-inside: avoid; margin-bottom: 0px; }
Это сработало для меня.
источник
Странная установка прозрачной границы решила это для меня:
@media print { div { border: 1px solid rgba(0,0,0,0) } }
Возможно, будет достаточно установить границу на элементе контейнера. <- Untestet.
источник
Ни один из ответов не помог мне, но после прочтения всех я понял, в чем проблема в моем случае. У меня есть 1 страница Html, которую я хочу распечатать, но она печатала с ней дополнительную белую пустую страницу. Я использую AdminLTE тему начальной загрузки 3 для страницы отчета для печати и в нем тег нижнего колонтитула, который я хотел разместить в правом нижнем углу страницы:
Я использовал jquery, чтобы поместить этот текст вместо предыдущего нижнего колонтитула «Права на копирование» с
$("footer").html("Printed by Mr. Someone");
и по умолчанию в теме нижний колонтитул тега использует класс .main-footer, который имеет атрибуты
padding: 15px; border-top: 1px solid
это вызвало лишнее пустое пространство, поэтому, узнав о проблеме, у меня были разные варианты, и лучшим вариантом было использовать
$( "footer" ).removeClass( "main-footer" );
Просто на этой конкретной странице
источник
Поместите нужные вам данные на страницу в div и используйте page-break-inside: избегайте этого div. Ваш div останется на одной странице и при необходимости перейдет на вторую или третью страницу, но следующий div, если он должен будет сделать разрыв страницы, должен начаться на следующей странице.
источник
Проверьте, есть ли внизу после тега html пробел. Удаление любых пробелов ниже помогло мне
источник