J'ai un projet qui nécessite l'impression d'un tableau HTML avec plusieurs lignes.
Mon problème est la façon dont le tableau est imprimé sur plusieurs pages. Il coupera parfois une ligne en deux, ce qui la rendra illisible car une moitié se trouve sur le bord saignant d'une page et le reste est imprimé en haut de la page suivante.
La seule solution plausible à laquelle je peux penser est d'utiliser des DIVs empilés au lieu d'un tableau et de forcer les sauts de page si nécessaire .. mais avant de passer par tout le changement, je pensais pouvoir demander ici avant.
<thead>
à votre tableau avec le CSS suivantthead {display: table-header-group; }
afin d'imprimer l'en-tête du tableau sur toutes les pages suivantes (utile pour les tableaux de données loooooong).Réponses:
la source
Remarque: lorsque vous utilisez le saut de page: toujours pour la balise, il créera un saut de page après le dernier bit du tableau, créant une page entièrement vierge à la fin à chaque fois! Pour résoudre ce problème, remplacez-le par saut de page: auto. Il se cassera correctement et ne créera pas une page vierge supplémentaire.
la source
Extension de la solution Sinan Ünür:
Il semble que
page-break-inside:avoid
dans certains navigateurs, seuls les éléments de bloc sont pris en compte, pas les cellules, les tableaux, les lignes ni les blocs en ligne.Si vous essayez d' utiliser
display:block
laTR
balise et que vous l'utilisezpage-break-inside:avoid
, cela fonctionne, mais vous vous trompez avec la disposition de votre table.la source
$(document).ready(function(){$("table tbody th, table tbody td").wrapInner("<div></div>");});
tr { display: block; }
pour l'impression uniquement, plutôt que d'ajouter tous les<div>
éléments étrangers . (N'ont pas été testés mais valent le détour)Aucune des réponses ici n'a fonctionné pour moi dans Chrome. AAverin sur GitHub a créé du Javascript utile à cet effet et cela a fonctionné pour moi:
Ajoutez simplement le js à votre code et ajoutez la classe 'splitForPrint' à votre tableau et il divisera soigneusement le tableau en plusieurs pages et ajoutera l'en-tête du tableau à chaque page.
la source
splitForPrint
mais dans le JS il n'y a nulle part où il a pris la référence de l'élément en utilisant le classNamesplitForPrint
. Seule la partie oùvar splitClassName = 'splitForPrint';
mais c'est tout.Utilisez ces propriétés CSS:
Par exemple:
via
la source
J'ai récemment résolu ce problème avec une bonne solution.
CSS :
JS :
Fonctionne comme un charme!
la source
J'ai fini par suivre l'approche de @ vicenteherrera, avec quelques ajustements (qui sont peut-être spécifiques au bootstrap 3).
Fondamentalement; nous ne pouvons pas casser
tr
s outd
s car ce ne sont pas des éléments de niveau bloc. Nous avons donc incorporédiv
s dans chacun, et appliquer nospage-break-*
règles contre lediv
. Deuxièmement; nous ajoutons un rembourrage en haut de chacune de ces divs, pour compenser les artefacts de style.Les ajustements de marge et de remplissage étaient nécessaires pour compenser une sorte de gigue qui était introduite (à mon avis - à partir du bootstrap). Je ne suis pas sûr de présenter une nouvelle solution à partir des autres réponses à cette question, mais je pense que cela aidera peut-être quelqu'un.
la source
J'ai fait face au même problème et je cherche partout une solution, enfin, je trouve quelque chose qui fonctionne pour moi pour tous les navigateurs.
utilisez ce css ou au lieu de css vous pouvez avoir ce javascript
J'espère que cela fonctionnera aussi pour vous.
la source
J'ai vérifié de nombreuses solutions et tout le monde ne fonctionnait pas bien.
J'ai donc essayé un petit truc et ça marche:
tfoot with style:
position: fixed; bottom: 0px;
est placé en bas de la dernière page, mais si le pied de page est trop haut, il est superposé par le contenu du tableau.tfoot with only:
display: table-footer-group;
n'est pas superposé, mais n'est pas en bas de la dernière page ...Mettons deux tfoot:
Une réserve de place sur les dernières pages, la seconde met votre pied de page accual.
la source
J'ai essayé toutes les suggestions ci-dessus et trouvé une solution de navigateur croisé simple et fonctionnelle pour ce problème. Aucun style ni saut de page n'est nécessaire pour cette solution. Pour la solution, le format du tableau doit être comme:
Format ci-dessus testé et fonctionnant dans les navigateurs croisés
la source
Eh bien les gars ... La plupart des solutions ici n'ont pas fonctionné. Voilà comment les choses ont fonctionné pour moi ..
HTML
Le premier jeu de têtes est utilisé comme factice afin qu'il n'y ait pas de bordure supérieure manquante dans la 2ème tête (c'est-à-dire la tête d'origine) pendant le saut de page.
la source
La réponse acceptée n'a pas fonctionné pour moi dans tous les navigateurs, mais le CSS suivant a fonctionné pour moi:
La structure html était:
Dans mon cas, il y avait quelques problèmes supplémentaires avec le
thead tr
, mais cela a résolu le problème d'origine de garder les lignes du tableau de se casser.En raison des problèmes d'en-tête, je me suis finalement retrouvé avec:
Cela n'a pas empêché les lignes de se casser; juste le contenu de chaque cellule.
la source