Estou usando uma propriedade CSS,
Se eu usar page-break-after: always;
=> imprime uma página em branco extra antes
Se eu usar page-break-before: always;
=> imprime uma página extra em branco depois. Como evitar isso?
<!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>
Respostas:
Você poderia talvez adicionar
.print:last-child { page-break-after: auto; }
portanto, o último
print
elemento não obterá a quebra de página extra.Observe que o seletor: last-child não é compatível com o IE8, se você estiver mirando naquele navegador miserável.
fonte
Você já tentou isso?
@media print { html, body { height: 99%; } }
fonte
height: 100%
. Consegui substituir isso comheight: auto
height: auto;
é mais elegante do queheight: 99%;
A solução descrita aqui me ajudou ( link do webarchive ).
Em primeiro lugar, você pode adicionar borda a todos os elementos para ver o que faz com que uma nova página seja anexada (talvez algumas margens, preenchimentos, etc.).
div { border: 1px solid black;}
E a solução em si foi adicionar os seguintes estilos:
html, body { height: auto; }
fonte
se nada disso funcionar, tente isso
@media print { html, body { height:100vh; margin: 0 !important; padding: 0 !important; overflow: hidden; } }
certifique-se de que é 100vh
fonte
Isso funciona para mim
.print+.print { page-break-before: always; }
fonte
Se você só quer usar CSS e evitar quebra de página, use
.print{ page-break-after: avoid; }
Dê uma olhada na mídia paginada
Você pode usar equivalentes de script para pageBreakBefore e pageBreakAfter, atribuir dinamicamente seus valores. Por exemplo, em vez de forçar quebras de página personalizadas para os visitantes, você pode criar um script para tornar isso opcional. Aqui, criarei uma caixa de seleção que alterna entre fatiar a página nos cabeçalhos (h2) e a critério da impressora (padrão):
<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 }
Clique aqui para ver um exemplo que usa isso. Você pode substituir H2 dentro do script por outra tag como P ou DIV.
http://www.javascriptkit.com/dhtmltutors/pagebreak.shtml
fonte
Não sei (por enquanto) por que, mas este ajudou:
@media print { html, body { border: 1px solid white; height: 99%; page-break-after: avoid; page-break-before: avoid; } }
Espero que alguém salve seu cabelo enquanto luta contra o problema ...;)
fonte
Parece que há várias causas possíveis, com o tema provável sendo que a etiqueta do corpo termina com uma altura considerada muito grande por nosso motivo.
Minha causa:
min-height: 100%
em uma folha de estilo básica.Minha solução:
min-height: auto
em uma@media print
diretiva.Nota,
auto
não parecia ser um valor correto, de acordo com PhpStorm. No entanto, está correto de acordo com a documentação da Mozilla sobre min-height :fonte
initial
já que presumi que seria problemático para elementos de tamanho dinâmico. Observe que o valor inicial é 0, então ainda presumo queauto
geralmente seja mais útil.definido
display:none
para todos os outros elementos que não são para impressão. configuraçãovisibility:hidden
irá mantê-los ocultos, mas todos eles ainda estão lá e ocuparam espaço para eles. página vazia é para aqueles elementos ocultos.fonte
No meu caso, definir a largura para todos os divs ajudou:
.page-content div { width: auto !important; max-width: 99%; }
fonte
Mudei a exibição de css e a propriedade de largura da área de impressão
#printArea{ display:table; width:100%; }
fonte
Tive um problema semelhante, mas a causa era porque eu tinha 40px de margem na parte inferior da página, então a última linha sempre quebraria, mesmo se houvesse espaço para ela na última página. Não por causa de qualquer tipo de
page-break-*
comando css. Consertei removendo a margem na impressão e funcionou bem. Só queria adicionar minha solução caso outra pessoa tenha algo semelhante!fonte
Depois de lutar com várias configurações e alturas de quebra de página e um milhão de regras CSS diferentes na tag do corpo, eu finalmente resolvi isso um ano depois.
Eu tenho um div que deveria ser a única coisa impressa na página, mas estava recebendo várias páginas em branco depois dele. Minha tag corporal está definida como,
visibility:hidden;
mas não foi o suficiente. Elementos de página verticalmente altos ainda ocupam 'espaço'. Então, adicionei isso em minhas regras de impressão CSS:para direcionar divs específicos por seus ids que contêm elementos de layout de página altos. Reduzi a altura e removi-os do layout. Não há mais páginas em branco. Anos depois, fico feliz em dizer ao meu cliente que o descobri. Espero que isso ajude alguém.
fonte
visibility: hidden;
, ainda ocupará espaço. Se você usardisplay: none;
o espaço será removido. Nesse ponto, você não precisará definir especificamente a altura, apenas FYI.O Chrome parece ter um bug em que, em certas situações, ocultar elementos pós-carregamento com display: none, deixa muito espaço extra para trás. Eu acho que eles estão calculando a altura do documento antes que ele termine a renderização. O Chrome também dispara 2 eventos de mudança de mídia e não oferece suporte a onbeforeprint etc. Eles são basicamente o exemplo de impressão. Esta é minha solução alternativa:
@media print { body { display: none; } } body.printing { display: block; }
Você dá body class = "printing" no doc pronto, e isso ativa os estilos de impressão. Este sistema permite a modularização de estilos de impressão e visualização de impressão no navegador.
fonte
Adicione este css à mesma página para estender o arquivo css.
<style type="text/css"> <!-- html, body { height: 95%; margin: 0 0 0 0; } --> </style>
fonte
Eu tentei todas as soluções, isso funciona para mim:
<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>
fonte
Acabei de encontrar um caso em que mudar de
</div> <script src="addressofjavascriptfile.js"></script> </body> </html>
para
<script src="addressofjavascriptfile.js"></script> </div> </body> </html>
corrigiu este problema.
fonte
.print:last-child{ page-break-after: avoid; page-break-inside: avoid; margin-bottom: 0px; }
Isso funcionou para mim.
fonte
Estranhamente, definir uma borda transparente resolveu isso para mim:
@media print { div { border: 1px solid rgba(0,0,0,0) } }
Talvez seja suficiente definir a borda do elemento do contêiner. <- Não testado.
fonte
Nenhuma das respostas funcionou comigo, mas depois de ler todas elas, descobri qual era o problema no meu caso. Tenho 1 página Html que quero imprimir, mas estava imprimindo com ela uma página em branco extra. Estou usando AdminLTE um tema bootstrap 3 para a página do relatório a ser impressa e nele a tag de rodapé. Eu queria colocar este texto no canto inferior direito da página:
Usei o jquery para colocar esse texto em vez do rodapé anterior de "Direitos de cópia" com
$("footer").html("Printed by Mr. Someone");
e por padrão no tema o rodapé da tag usa a classe .main-footer que tem os atributos
padding: 15px; border-top: 1px solid
que causou um espaço em branco extra, então, depois de saber o problema, tive diferentes opções, e a melhor opção era usar
$( "footer" ).removeClass( "main-footer" );
Apenas naquela página específica
fonte
Coloque o que você precisa em uma página em um div e use a quebra de página interna: evite nesse div. Seu div permanecerá em uma página e irá para uma segunda ou terceira página, se necessário, mas o próximo div, caso precise fazer uma quebra de página, deve começar na próxima página.
fonte
Verifique se há algum espaço em branco após a tag html na parte inferior. Remover qualquer espaço em branco abaixo me ajudou
fonte