Quero evitar a quebra de página dentro da linha da tabela em html, quando converter html para PDF por wkhtmltopdf. Eu uso a quebra de página dentro: evitar com tabela - funciona, mas eu tenho tantas linhas, então não funciona. Se definir a exibição de tr como bloco ou alguma outra coisa, ele muda a formatação da tabela e insere borda dupla. Ou é possível inserir o cabeçalho da tabela em cada página, onde a tabela foi dividida.
html
css
wkhtmltopdf
Ankit Mittal
fonte
fonte
page-break-inside: avoid;
?page-break-inside:avoid
com todos os elementos da tabela como tr td, mas não funcionou.Respostas:
Você pode tentar isso com CSS:
A maioria das regras CSS não se aplicam a
<tr>
tags diretamente, exatamente por causa do que você apontou acima - elas têm umdisplay
estilo único , que não permite essas regras CSS. No entanto, o<td>
e<th>
marcas dentro deles normalmente fazer permitir que este tipo de especificação - e você pode facilmente aplicar tais regras a ALL criança-<tr>
"s e<td>
está usando CSS como mostrado acima.fonte
A melhor maneira que encontrei de lidar com esse problema em navegadores webkit é colocar um div dentro de cada elemento td e aplicar o estilo de quebra de página: evitar ao div, como este:
Mesmo que o Chrome supostamente não reconheça o 'quebra de página dentro: evitar;' , isso parece evitar que o conteúdo da linha seja dividido ao meio por uma quebra de página ao usar wktohtml para gerar PDFs. O elemento tr pode pairar um pouco sobre a quebra de página, mas o div e qualquer coisa dentro dele não.
fonte
margin: 4px 0 4px 0;
funcionou para mim, eu estava perdendo um recorde ocasionalmente. ObrigadoEu usei o truque 4px de @AaronHill acima ( link ) e funcionou muito bem! Usei embora uma regra de css mais simples sem precisar adicionar uma classe a cada
<td>
na tabela.fonte
Eu encontrei uma nova maneira de resolver este problema, pelo menos para mim (Chrome versão 63.0.3239.84 (versão oficial) (64 bits) no MacOS Sierra)
Adicione uma regra CSS à tabela pai:
e para o td:
Na verdade, encontrei essa solução no Stack Overflow, mas ela não apareceu nas pesquisas iniciais do Google: CSS para interromper a quebra de página dentro da linha da tabela
Parabéns a @ Ibrennan208 por resolver o problema!
fonte
O uso de quebra de página CSS não funcionará (esse é um problema do navegador do webkit).
Há um hack wkhtmltopdf de divisão de tabela JavaScript que divide uma tabela longa em tabelas menores automaticamente, dependendo do tamanho da página que você especificar (em vez de quebrar a página após um valor estático de x linhas): https://gist.github.com/3683510
fonte
Escrevi o seguinte JavaScript com base na resposta de Aaron Hill:
Onde dontSplit é a classe da tabela em que você não deseja que o td seja dividido entre as páginas. Use-o com o seguinte CSS (novamente, atribuído a Aaron Hill):
Isso parece estar funcionando bem na versão mais recente do Chrome.
fonte
A única maneira que descobri de funcionar foi colocar cada elemento TR dentro de seu próprio elemento TBODY e aplicar as regras de quebra de página ao elemento TBODY via css
fonte
tbody
elementos são válidos dentro detable
stackoverflow.com/questions/3076708/…Tente com
estilo a td para evitar que se quebre em novas linhas.
fonte
Descobri que
page-break-inside: avoid
isso não funcionará se algum dos elementos pais da tabela fordisplay: inline-block
ouflex
. Certifique-se de que todos os elementos pais sejamdisplay: block
.Considere também substituindo
table
,tr
,td
'sdisplay
estilos com CSSgrid
para o layout de impressão se você continuar a ter problemas com a mesa.fonte
A solução 2020
A única coisa que consegui trabalhar de forma consistente em todos os navegadores é colocar cada linha dentro de seu próprio elemento de tabela . Isso também funciona com o nó HTML-PDF. Em seguida, defina tudo como
page-break-inside: avoid
.A única desvantagem disso é que você deve definir manualmente a largura das colunas, caso contrário, parecerá um tanto estranho. O seguinte funcionou bem para mim com duas colunas.
fonte