J'utilise Twitter-Bootstrap et je dois pouvoir imprimer la page telle qu'elle est sur le navigateur. Je peux très bien imprimer d'autres pages créées avec Twitter-Bootstrap, mais je n'arrive pas à imprimer ma page qui utilise uniquement Twitter-Bootstrap. Est-ce que je manque un tag quelque part?
Page officielle TB imprimée:
Ma page imprimée:
À quoi ressemble réellement ma page:
Assurez-vous d'avoir une feuille de style assignée pour l'impression.
Cela pourrait être une feuille de style séparée:
<link rel="stylesheet" type="text/css" media="print" href="print.css">
ou un que vous partagez pour tous les appareils:
<link rel="stylesheet" type="text/css" href="bootstrap.min.css"> # Note there's no media attribute
Ensuite, vous pouvez écrire vos styles pour les imprimantes dans les feuilles de style séparées ou dans la feuille partagée à l’aide de requêtes multimédia:
@media print {
/* Your styles here */
}
La version actuelle de Bootstrap stable est 3.2.0 .
Avec la version 3.2 visible-print obsolète, vous devriez utiliser comme suit:
Class Browser Print
-------------------------------------------------
.visible-print-block Hidden Visible (as block)
.visible-print-inline Hidden Visible (as inline)
.visible-print-inline-block Hidden Visible (as inline-block)
.hidden-print Visible Hidden
Les classes d'impression sont maintenant dans les documents: http://getbootstrap.com/css/#responsive-utilities-print
Similar to the regular responsive classes,
use these for toggling content for print.
Class Browser Print
----------------------------------------
.visible-print Hidden Visible
.hidden-print Visible Hidden
Après avoir ajouté le fichier bootstrap.css dans votre code HTML,
Trouvez les parties que vous ne voulez pas imprimer et ajoutez la classe hidden-print
aux balises . Parce que le fichier css comprend ceci:
@media print {
.visible-print { display: inherit !important; }
.hidden-print { display: none !important; }
}
Remplacer chaque col-md-
par col-xs-
par exemple, remplacez chaque col-md-6
par col-xs-6
.
Ceci est la chose qui a fonctionné pour moi pour me débarrasser de ce problème, vous pouvez voir ce que vous devez remplacer.
Il y a une section de code @media print
dans le fichier css (Bootstrap 3.3.1 [UPDATE:] à 3.3.5), elle supprime pratiquement tout le style, de sorte que vous obtenez des impressions assez fades, même quand il fonctionne.
Pour le moment, j'ai dû supprimer la section @media print
de bootstrap.css - ce dont je suis vraiment pas heureux, mais mes utilisateurs veulent des captures d'écran directes, donc cela devra être fait pour le moment. Si quelqu'un sait comment le supprimer sans modifier les fichiers d'amorçage, je serais très intéressé.
Voici le bloc de code "fautif", qui commence à la ligne 192:
@media print {
*,
*:before,enter code here
*:after {
color: #000 !important;
text-shadow: none !important;
background: transparent !important;
-webkit-box-shadow: none !important;
box-shadow: none !important;
}
a,
a:visited {
text-decoration: underline;
}
a[href]:after {
content: " (" attr(href) ")";
}
abbr[title]:after {
content: " (" attr(title) ")";
}
a[href^="#"]:after,
a[href^="javascript:"]:after {
content: "";
}
pre,
blockquote {
border: 1px solid #999;
page-break-inside: avoid;
}
thead {
display: table-header-group;
}
tr,
img {
page-break-inside: avoid;
}
img {
max-width: 100% !important;
}
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
h2,
h3 {
page-break-after: avoid;
}
select {
background: #fff !important;
}
.navbar {
display: none;
}
.btn > .caret,
.dropup > .btn > .caret {
border-top-color: #000 !important;
}
.label {
border: 1px solid #000;
}
.table {
border-collapse: collapse !important;
}
.table td,
.table th {
background-color: #fff !important;
}
.table-bordered th,
.table-bordered td {
border: 1px solid #ddd !important;
}
}
La meilleure option que j'ai trouvée était http://html2canvas.hertzen.com/
http://jsfiddle.net/nurbsurf/1235emen/
html2canvas(document.body, {
onrendered: function(canvas) {
$("#page").hide();
document.body.appendChild(canvas);
window.print();
$('canvas').remove();
$("#page").show();
}
});
Si quelqu'un recherche une solution pour Bootstrap v2.X.X ici. Je quitte la solution que j'utilisais. Ce n'est pas complètement testé sur tous les navigateurs, mais cela pourrait être un bon début.
1) assurez-vous que l'attribut média de bootstrap-responsive.css
est screen
.
<link href="/css/bootstrap-responsive.min.css" rel="stylesheet" media="screen" />
2) créez un print.css
et assurez-vous que son attribut multimédia print
<link href="/css/print.css" rel="stylesheet" media="print" />
3) dans print.css
, ajoutez la "largeur" de votre site web en html & body
html,
body {
width: 1200px !important;
}
4.) reproduisez les classes de requête multimédia nécessaires dans print.css
car elles étaient à l'intérieur de bootstrap-responsive.css
et nous l'avons désactivé lors de l'impression.
.hidden{display:none;visibility:hidden}
.visible-phone{display:none!important}
.visible-tablet{display:none!important}
.hidden-desktop{display:none!important}
.visible-desktop{display:inherit!important}
Voici la version complète de print.css
:
html,
body {
width: 1200px !important;
}
.hidden{display:none;visibility:hidden}
.visible-phone{display:none!important}
.visible-tablet{display:none!important}
.hidden-desktop{display:none!important}
.visible-desktop{display:inherit!important}
2 choses FYI -
Pour que la vue d'impression ressemble à la tablette ou au bureau, incluez bootstrap comme .less, pas comme .css. Vous pouvez ensuite écraser les classes réactives bootstrap à la fin du fichier bootstrap_variables, par exemple:
@container-sm: 1200px;
@container-md: 1200px;
@container-lg: 1200px;
@screen-sm: 0;
Ne vous inquiétez pas pour mettre ces variables à la fin du fichier. MOINS prend en charge le chargement paresseux des variables afin qu'elles soient appliquées.
Si vous souhaitez conserver les colonnes sur du papier A4 (environ 540 pixels), c’est une bonne idée.
@media print {
.make-grid(print-A4);
}
.make-print-A4-column(@columns) {
@media print {
float: left;
width: percentage((@columns / @grid-columns));
}
}
Vous pouvez l'utiliser comme ceci:
<div class="col-sm-4 col-print-A4-4">