Cara membuat halaman Twitter-Bootstrap yang dapat dicetak

162

Saya menggunakan Twitter-Bootstrap dan saya harus dapat mencetak halaman seperti yang terlihat di browser. Saya dapat mencetak halaman lain yang dibuat dengan Twitter-Bootstrap, tetapi sepertinya saya tidak dapat mencetak halaman saya yang menggunakan murni Twitter-Bootstrap. Apakah saya kehilangan tag di suatu tempat?

Halaman TB resmi saat dicetak: Halaman Bootstrap Twitter

Halaman saya saat dicetak: masukkan deskripsi gambar di sini

Seperti apa sebenarnya halaman saya: masukkan deskripsi gambar di sini

Jay Q.
sumber
2
Apakah Anda menentukan atribut media = "layar"? Lihatlah jawaban saya.
albertedevigo

Jawaban:

156

Pastikan memiliki lembar gaya yang ditetapkan untuk dicetak.
Ini bisa berupa stylesheet yang terpisah:

<link rel="stylesheet" type="text/css" media="print" href="print.css">

atau yang Anda bagikan untuk semua perangkat:

<link rel="stylesheet" type="text/css" href="bootstrap.min.css"> # Note there's no media attribute

Kemudian, Anda dapat menulis gaya Anda untuk printer di stylesheet yang terpisah atau yang dibagikan menggunakan kueri media:

@media print {
    /* Your styles here */
}
albertedevigo
sumber
29
Saya baru saja menambahkan ini: <link rel = "stylesheet" type = "text / css" media = "print" href = "bootstrap.min.css"> dan tidak perlu melakukan hal lain. Bekerja seperti pesona. Terima kasih!
Jay Q.
13
Jika Anda sudah menggunakan stylesheet ini, kemungkinan Anda memiliki yang Anda miliki saat ini media="screen", yang tidak akan terlihat oleh printer. Anda dapat beralih ke media="all", atau hanya menghapus mediaseperti yang disarankan jawaban di atas.
Wex
albertedevigo, saya butuh bantuan mengenai styling. Seperti mengubah ukuran font, lebar, ... apa sebenarnya yang perlu diubah? TIA. @ JayQ. : Apakah itu masih berfungsi atau ketinggalan jaman? karena saya tidak bisa membuatnya bekerja.
musafar006
@dreamster, cukup sertakan gaya Anda di stylesheet yang berlaku untuk pencetakan. Perhatikan bahwa cascading CSS masih berfungsi; jadi ketertiban, warisan dan prioritas pemilih akan mempengaruhi hasilnya. Anda mungkin akan mengajukan pertanyaan baru dengan kode Anda sendiri.
albertedevigo
181

Pembaruan Bootstrap 3.2: (rilis saat ini)

Versi Bootstrap stabil saat ini adalah 3.2.0 .
Dengan versi 3.2-cetak sudah usang, jadi Anda harus menggunakan seperti ini:

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

Pembaruan Bootstrap 3:

Kelas cetak sekarang dalam dokumen: 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

Versi Bootstrap 2.3.1:

Setelah menambahkan file bootstrap.css ke HTML Anda,
Temukan bagian-bagian yang tidak ingin Anda cetak dan tambahkan hidden-printkelas ke dalam tag. Karena file css termasuk ini:

@media print {
  .visible-print  { display: inherit !important; }
  .hidden-print   { display: none !important; }
}
trante
sumber
4
Apakah tidak ada kelas untuk membuat sesuatu terlihat pada browser dan printer jika saya membuat semuanya ( body) tidak terlihat .hidden-print, tetapi ingin menimpa elemen tertentu yang akan ditampilkan?
Vincent Poirier
1
@VincentPoirier - jika elemen disembunyikan, semua yang ada di dalamnya disembunyikan. Jadi tidak berarti menyembunyikan tubuh, tetapi menyembunyikan sesuatu yang merupakan bagian dari tubuh. Karena tidak akan ada konteks (wadah) untuk menunjukkan sub-elemen itu. Alih-alih, lakukan css untuk menyembunyikan semua elemen daun Anda (mis. Letakkan kelas default di div bagian dalam Anda), lalu gunakan kelas atau id css yang sesuai di tempat yang diinginkan agar terlihat. Kemungkinan akan memerlukan beberapa percobaan untuk mendapatkan ini dengan benar.
ToolmakerSteve
112

Ganti setiap col-md-dengancol-xs-

misalnya: ganti setiap col-md-6ke col-xs-6.

Ini adalah hal yang berhasil bagi saya untuk menyingkirkan saya dari masalah ini, Anda dapat melihat apa yang harus Anda ganti.

Sonam
sumber
Terima kasih! Sedang mengalami masalah dengan skala tampilan HTML dibandingkan dengan Print View ... semuanya baik-baik saja sekarang!
David Bélanger
2
Hai, terima kasih! Saya menghadapi masalah saat mencetak halaman saya, masing-masing divdigunakan untuk pergi di bawah yang sebelumnya. Jawaban ini memberi saya petunjuk, saya menambahkan col-xs-*sebelum masing col-md-*- masing dan ini memperbaiki masalah. PENOLAKAN: Saya tidak mencoba menambahkan wadah karena <div class="row"></div>mungkin juga telah memecahkan masalah (tampak jelas).
Fr0zenFyr
6
Kecuali jika dimaksudkan untuk memiliki tata letak yang berbeda untuk layar sempit (mis. Telepon) daripada untuk pencetakan. Tampak aneh bahwa logika printer bootstrap berpikir layar cetaknya sangat sempit.
ToolmakerSteve
3
Ini harus di atas.
Suraj
Hanya untuk menambahkan bahwa Anda dapat mengganti col-md- seperti jawabannya atau Anda bisa menambahkan col-xs- seperti: class = "col-md-6 col-xs-6" dan Anda dapat mencampur dan mencocokkan tergantung pada persyaratan desain Anda.
zaidorx
17

Ada bagian @media printkode dalam file css (Bootstrap 3.3.1 [UPDATE:] ke 3.3.5), ini melucuti hampir semua gaya, sehingga Anda mendapatkan hasil cetak yang cukup hambar bahkan ketika sedang bekerja.

Untuk saat ini saya harus menggunakan stripping @media printbagian dari bootstrap.css - yang saya benar-benar tidak senang tetapi pengguna saya ingin langsung ambil layar jadi ini harus dilakukan untuk saat ini. Jika ada yang tahu cara menekannya tanpa perubahan pada file bootstrap saya akan sangat tertarik.

Inilah blok kode 'menyinggung', dimulai pada baris # 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;
  }
}
Hugo Yates
sumber
6

Pilihan terbaik yang saya temukan adalah 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();
  }
});
Bodie Leonard
sumber
Saya mencoba keduanya 0,4 dan 0,5 tetapi tidak satu pun dari mereka bekerja. 0,5 menambahkan beberapa barang yang bagus setelah halaman saya, tetapi halaman asli masih ada, dan kemudian bagaimana saya mencetaknya? Mencoba 0,4 memicu cetakan, halaman asli juga masih ada, dan rendernya agak rusak.
Csaba Toth
3

Jika seseorang mencari solusi untuk Bootstrap v2.XX di sini. Saya meninggalkan solusi yang saya gunakan. Ini tidak sepenuhnya diuji pada semua browser namun ini bisa menjadi awal yang baik.

1) pastikan atribut media bootstrap-responsive.cssadalah screen.

<link href="/css/bootstrap-responsive.min.css" rel="stylesheet" media="screen" />

2) buat print.cssdan pastikan atribut medianyaprint

<link href="/css/print.css" rel="stylesheet" media="print" />

3) di dalam print.css, tambahkan "lebar" situs web Anda di html & tubuh

html, 
body {
    width: 1200px !important;
}

4.) mereproduksi kelas kueri media yang diperlukan print.csskarena ada di dalam bootstrap-responsive.cssdan kami telah menonaktifkannya saat mencetak.

.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}

Ini adalah versi lengkap dari 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}
abchau
sumber
0

Untuk membuat tampilan cetak terlihat seperti tablet atau desktop, sertakan bootstrap sebagai .less, bukan sebagai .css dan kemudian Anda dapat menimpa kelas respons bootstrap di akhir file bootstrap_variables misalnya seperti ini:

@container-sm:      1200px;
@container-md:      1200px;
@container-lg:      1200px;
@screen-sm:         0;

Jangan khawatir tentang menempatkan variabel ini di akhir file. KURANG mendukung malas memuat variabel sehingga mereka akan diterapkan.

Hrvoje Golcic
sumber
0

Jika Anda ingin menjaga kolom pada cetakan A4 (yaitu sekitar 540px) ini adalah ide yang bagus

@media print {
    .make-grid(print-A4);
}

.make-print-A4-column(@columns) {
    @media print {
        float: left;
        width: percentage((@columns / @grid-columns));
    }
}

Anda bisa menggunakannya seperti ini:

<div class="col-sm-4 col-print-A4-4">

Søren Westh Larsen
sumber