Eu tenho um projeto que requer a impressão de uma tabela HTML com muitas linhas.
Meu problema é a maneira como a tabela é impressa em várias páginas. Às vezes, ele corta uma linha pela metade, tornando-a ilegível porque a metade está na borda de uma página e o restante é impresso na parte superior da página seguinte.
A única solução plausível em que consigo pensar é usar DIVs empilhados em vez de uma tabela e forçar quebras de página, se necessário .. mas antes de passar por toda a mudança, pensei em perguntar aqui antes.
<thead>
à sua tabela com o seguinte cssthead {display: table-header-group; }
, para imprimir o cabeçalho da tabela em todas as páginas subseqüentes (útil para loooooongas tabelas de dados).Respostas:
fonte
Nota: ao usar a quebra de página depois: sempre para a tag, ela criará uma quebra de página após o último bit da tabela, criando uma página totalmente em branco no final sempre! Para corrigir isso, basta alterá-lo para page-break-after: auto. Ele quebrará corretamente e não criará uma página em branco extra.
fonte
Expansão da solução Sinan Ünür:
Parece que
page-break-inside:avoid
em alguns navegadores é levado em consideração apenas para elementos de bloco, não para célula, tabela, linha nem bloco embutido.Se você tentar
display:block
aTR
tag e usá-page-break-inside:avoid
la, ela funciona, mas mexe com o layout da sua tabela.fonte
$(document).ready(function(){$("table tbody th, table tbody td").wrapInner("<div></div>");});
tr { display: block; }
para Somente impressão, em vez de adicionar todos os<div>
elementos estranhos . (Não testei, mas vale a pena olhar)Nenhuma das respostas aqui funcionou para mim no Chrome. O AAverin no GitHub criou um Javascript útil para esse fim e funcionou para mim:
Basta adicionar os js ao seu código e adicionar a classe 'splitForPrint' à sua tabela, dividindo-a ordenadamente em várias páginas e adicionando o cabeçalho da tabela a cada página.
fonte
splitForPrint
mas no JS, em nenhum lugar foi necessária a referência do elemento usando o classNamesplitForPrint
. Apenas a parte ondevar splitClassName = 'splitForPrint';
mas é isso.Use estas propriedades CSS:
Por exemplo:
através da
fonte
Eu recentemente resolvi esse problema com uma boa solução.
CSS :
JS :
Funciona como um encanto!
fonte
Acabei seguindo a abordagem do @ vicenteherrera, com alguns ajustes (que são possivelmente específicos do bootstrap 3).
Basicamente; não podemos quebrar
tr
s outd
s porque eles não são elementos em nível de bloco. Então, incorporamosdiv
s em cada um e aplicamos nossaspage-break-*
regras contra odiv
. Em segundo lugar; adicionamos algum preenchimento à parte superior de cada uma dessas divs para compensar qualquer artefato de estilo.Os ajustes de margem e preenchimento foram necessários para compensar algum tipo de instabilidade que estava sendo introduzida (pelo meu palpite - a partir do bootstrap). Não tenho certeza se estou apresentando alguma solução nova das outras respostas a essa pergunta, mas acho que talvez isso ajude alguém.
fonte
Enfrentei o mesmo problema e procurei em toda parte uma solução; finalmente, encontro algo que funcione para todos os navegadores.
use este css ou em vez de css você pode ter este javascript
Espero que isso funcione para você também.
fonte
Eu verifiquei muitas soluções e ninguém estava funcionando bem.
Então, eu tentei um pequeno truque e funciona:
tfoot com estilo:
position: fixed; bottom: 0px;
é colocado na parte inferior da última página, mas se o rodapé for muito alto, ele será sobreposto pelo conteúdo da tabela.tfoot com only:
display: table-footer-group;
não se sobrepõe, mas não está na parte inferior da última página ...Vamos colocar dois tfoot:
Uma reserva é colocada em páginas que não são as últimas, a segunda colocação no rodapé da acumulação.
fonte
Tentei todas as sugestões fornecidas acima e encontrei uma solução simples e funcional para vários navegadores para esse problema. Não há estilos ou quebra de página necessários para esta solução. Para a solução, o formato da tabela deve ser como:
Formato acima testado e funcionando em navegadores cruzados
fonte
Bem, pessoal ... A maioria das soluções aqui em cima não funcionou. Então é assim que as coisas funcionaram para mim ..
HTML
O primeiro conjunto de cabeçotes é usado como um fictício, para que não haja uma borda superior ausente no segundo cabeçalho (ou seja, cabeçalho original) durante a quebra de página.
fonte
A resposta aceita não funcionou para mim em todos os navegadores, mas o css a seguir funcionou para mim:
A estrutura html era:
No meu caso, houve alguns problemas adicionais com o
thead tr
, mas isso resolveu o problema original de impedir a quebra das linhas da tabela.Por causa dos problemas de cabeçalho, acabei tendo:
Isso não impediu a quebra de linhas; apenas o conteúdo de cada célula.
fonte