วิธีการสร้างหน้า Twitter-Bootstrap ที่พิมพ์ได้


162

ฉันใช้ Twitter-Bootstrap และฉันต้องสามารถพิมพ์หน้าเว็บในลักษณะที่ปรากฏบนเบราว์เซอร์ ฉันสามารถพิมพ์หน้าอื่น ๆ ที่ทำด้วย Twitter-Bootstrap ได้ดี แต่ฉันไม่สามารถพิมพ์หน้าของฉันที่ใช้ Twitter-Bootstrap ได้อย่างหมดจด ฉันไม่มีแท็กที่ไหนบ้างไหม?

หน้า TB อย่างเป็นทางการเมื่อพิมพ์: Twitter Bootstrap Page

หน้าของฉันเมื่อพิมพ์: ป้อนคำอธิบายรูปภาพที่นี่

หน้าตาของฉันเป็นอย่างไร: ป้อนคำอธิบายรูปภาพที่นี่


2
คุณกำลังระบุแอตทริบิวต์ media = "screen" หรือไม่ ลองดูคำตอบของฉัน
albertedevigo

คำตอบ:


156

ต้องแน่ใจว่าได้กำหนดสไตล์ชีทสำหรับการพิมพ์
อาจเป็นสไตล์ชีทที่แยกต่างหาก:

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

หรือที่คุณแบ่งปันสำหรับอุปกรณ์ทั้งหมด:

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

จากนั้นคุณสามารถเขียนสไตล์ของคุณสำหรับเครื่องพิมพ์ในสไตล์ชีทแยกต่างหากหรือในสไตล์ที่แชร์โดยใช้คำสั่งสื่อ:

@media print {
    /* Your styles here */
}

29
ฉันเพิ่งเพิ่มสิ่งนี้: <link rel = "stylesheet" type = "text / css" media = "print" href = "bootstrap.min.css"> และไม่จำเป็นต้องทำอะไรอีก ทำงานเหมือนจับใจ ขอบคุณ!
Jay Q.

13
หากคุณใช้สไตล์ชีทนี้อยู่แล้วคุณมีโอกาสเป็นไปได้ที่media="screen"เครื่องพิมพ์ของคุณจะไม่ปรากฏให้เห็น คุณสามารถเปลี่ยนเป็นmedia="all"หรือลบออกmediaตามคำแนะนำด้านบน
Wex

albertedevigo ฉันต้องการความช่วยเหลือเกี่ยวกับการออกแบบ เช่นเดียวกับการเปลี่ยนขนาดตัวอักษรความกว้าง ... สิ่งที่จำเป็นในการเปลี่ยนแปลงอย่างแน่นอน? TIA @JayQ : นั่นยังทำงานหรือล้าสมัยอยู่หรือเปล่า? เพราะฉันไม่สามารถทำงานได้
musafar006

@dreamster เพียงแค่ใส่สไตล์ของคุณในสไตล์ชีทที่ใช้กับการพิมพ์ โปรดทราบว่า CSS แบบเรียงซ้อนยังคงใช้งานได้; ดังนั้นลำดับการสืบทอดและลำดับความสำคัญของตัวเลือกจะมีผลต่อผลลัพธ์ คุณอาจถามคำถามใหม่ด้วยรหัสของคุณเอง
albertedevigo

181

การอัพเดท Bootstrap 3.2: (รีลีสปัจจุบัน)

เสถียรภาพรุ่น Bootstrap ปัจจุบันคือ3.2.0
ด้วยเวอร์ชัน 3.2 ที่มองเห็นได้ไม่ชัดเจน - พิมพ์ดังนั้นคุณควรใช้เช่นนี้:

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

Bootstrap 3 อัพเดท:

คลาสการพิมพ์อยู่ในเอกสารแล้ว: 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

Bootstrap 2.3.1 เวอร์ชั่น:

หลังจากเพิ่มไฟล์ bootstrap.css ลงใน HTML ของคุณ
ค้นหาชิ้นส่วนที่คุณไม่ต้องการพิมพ์และเพิ่มhidden-printคลาสลงในแท็ก เนื่องจากไฟล์ css มีสิ่งนี้:

@media print {
  .visible-print  { display: inherit !important; }
  .hidden-print   { display: none !important; }
}

4
ไม่มีคลาสที่จะทำให้บางสิ่งบางอย่างสามารถมองเห็นได้ทั้งบนเบราว์เซอร์และเครื่องพิมพ์ในกรณีที่ฉันทำให้ทุกอย่าง ( body) มองไม่เห็นด้วย.hidden-printแต่ต้องการแทนที่องค์ประกอบเฉพาะที่จะแสดงหรือไม่
Vincent Poirier

1
@VincentPoirier - หากองค์ประกอบถูกซ่อนอยู่ทุกอย่างภายในจะถูกซ่อน ดังนั้นจึงไม่มีความหมายในการซ่อนร่างกาย แต่ไม่ซ่อนสิ่งที่เป็นส่วนหนึ่งของร่างกาย เนื่องจากจะไม่มีบริบท (คอนเทนเนอร์) ที่จะแสดงองค์ประกอบย่อยนั้น แต่ทำ css เพื่อซ่อนองค์ประกอบใบไม้ทั้งหมดของคุณ (เช่นใส่คลาสเริ่มต้นใน divs ภายในของคุณ) จากนั้นใช้คลาส css หรือ id ที่เหมาะสมในกรณีที่ต้องการให้มองเห็นได้ อาจจะต้องมีการทดลองบางอย่างเพื่อให้สิ่งนี้ถูกต้อง
ToolmakerSteve

112

แทนที่col-md-ด้วยcol-xs-

เช่นเปลี่ยนทุกการcol-md-6col-xs-6

นี่คือสิ่งที่ทำงานให้ฉันเพื่อกำจัดปัญหานี้คุณสามารถดูสิ่งที่คุณต้องเปลี่ยน


ขอบคุณมาก! มีปัญหากับขนาดของมุมมอง HTML เทียบกับมุมมองพิมพ์ ... ตอนนี้ทุกอย่างเรียบร้อยดี!
David Bélanger

2
เฮ้ขอบคุณ! ฉันประสบปัญหาเมื่อพิมพ์หน้าของฉันแต่ละครั้งdivเคยลงไปด้านล่างหน้าก่อนหน้านี้ คำตอบนี้ให้คำแนะนำแก่ฉันฉันเพิ่มcol-xs-*ก่อนcol-md-*และแก้ไขปัญหานี้ การปฏิเสธความรับผิด: ฉันไม่ได้ทดสอบเพิ่มคอนเทนเนอร์<div class="row"></div>ซึ่งอาจแก้ไขปัญหาได้ (ดูเหมือนชัดเจน)
Fr0zenFyr

6
ถ้าไม่มีใครตั้งใจจะมีเลย์เอาต์ที่แตกต่างกันสำหรับหน้าจอที่แคบ (เช่นโทรศัพท์) กว่าการพิมพ์ ดูเหมือนแปลกที่ตรรกะเครื่องพิมพ์ bootstrap คิดว่าหน้าจอการพิมพ์นั้นแคบมาก
ToolmakerSteve

3
นี่ควรจะอยู่ด้านบน
Suraj

เพียงแค่เพิ่มว่าคุณสามารถแทนที่ col-md- ตามที่คำตอบบอกไว้หรือคุณสามารถเพิ่ม col-xs- like: class = "col-md-6 col-xs-6" และคุณสามารถผสมและจับคู่ตามข้อกำหนด ของการออกแบบของคุณ
zaidorx

17

มีส่วนหนึ่งของ@media printรหัสในไฟล์ css (Bootstrap 3.3.1 [อัพเดท:] ถึง 3.3.5) ซึ่งจะทำให้สไตล์ทั้งหมดแทบหมดดังนั้นคุณจะได้รับงานพิมพ์ที่ค่อนข้างอ่อนไหวแม้ในขณะที่ทำงานอยู่

สำหรับตอนนี้ฉันต้องหันไปใช้การแยก@media printส่วนจาก bootstrap.css ซึ่งฉันไม่มีความสุขจริง ๆแต่ผู้ใช้ของฉันต้องการโดยตรงหน้าจอคว้าดังนั้นตอนนี้จะต้องทำ หากใครรู้วิธีการปราบปรามโดยไม่เปลี่ยนแปลงไฟล์ bootstrap ฉันสนใจมาก

นี่คือบล็อคโค้ด 'offending' เริ่มที่บรรทัด # 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;
  }
}

6

ตัวเลือกที่ดีที่สุดที่ฉันพบคือ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();
  }
});

ฉันลองทั้ง 0.4 และ 0.5 แต่ก็ไม่ได้ผล 0.5 ต่อท้ายสิ่งที่ดูดีหลังจากหน้าของฉัน แต่หน้าเดิมยังคงอยู่ที่นั่นแล้วฉันควรจะพิมพ์สิ่งนั้นอย่างไร การลอง 0.4 ทำให้เกิดการพิมพ์หน้าต้นฉบับก็ยังอยู่ที่นั่นและการแสดงผลก็ไม่ได้ผล
Csaba Toth

3

ในกรณีที่มีใครบางคนกำลังมองหาทางออกสำหรับBootstrap v2.XXที่นี่ ฉันกำลังออกจากโซลูชันที่ฉันใช้อยู่ นี่ไม่ได้ทดสอบอย่างเต็มที่กับเบราว์เซอร์ทั้งหมด แต่มันอาจเป็นการเริ่มต้นที่ดี

1) ให้แน่ใจว่าคุณลักษณะของสื่อคือbootstrap-responsive.cssscreen

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

2) สร้างprint.cssและตรวจสอบให้แน่ใจว่าสื่อของมันprint

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

3) ข้างในprint.cssเพิ่ม "ความกว้าง" ของเว็บไซต์ของคุณเป็น html & body

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

4. ) สร้างคลาสเคียวรีสื่อบันทึกที่จำเป็นprint.cssเนื่องจากอยู่ภายในbootstrap-responsive.cssและเราได้ปิดใช้งานเมื่อพิมพ์

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

นี่คือเวอร์ชันเต็มของ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

2 สิ่งที่ FYI -

  1. ในตอนนี้พวกเขาได้เพิ่มคลาสการสลับสองสามครั้ง ดูสิ่งที่มีอยู่ในรีลีสล่าสุดที่มีความเสถียร - สลับการพิมพ์ใน responsive-Utilities.less
  2. โซลูชั่นใหม่และปรับปรุงที่มาใน Bootstrap 3.0 - พวกเขากำลังเพิ่มไฟล์ print.less แยกต่างหาก ดูที่print.less แยกต่างหาก

0

ในการทำให้มุมมองการพิมพ์ดูเหมือนแท็บเล็ตหรือเดสก์ท็อปให้ใส่ bootstrap เป็น .less ไม่ใช่. css จากนั้นคุณสามารถเขียนทับคลาสการตอบสนอง bootstrap ในตอนท้ายของไฟล์ bootstrap_variables เช่นนี้:

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

ไม่ต้องกังวลกับการวางตัวแปรนี้ไว้ท้ายไฟล์ LESS รองรับการโหลดตัวแปรที่ขี้เกียจดังนั้นมันจะถูกนำไปใช้


0

หากคุณต้องการเก็บคอลัมน์ไว้ในการพิมพ์ A4 (ประมาณ 540px) นี่เป็นความคิดที่ดี

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

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

คุณสามารถใช้สิ่งนี้:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.