Cách tạo trang Twitter-Bootstrap có thể in


162

Tôi đang sử dụng Twitter-Bootstrap và tôi cần có thể in trang theo cách hiển thị trên trình duyệt. Tôi có thể in các trang khác được tạo bằng Twitter-Bootstrap rất tốt nhưng dường như tôi không thể in trang của mình sử dụng hoàn toàn Twitter-Bootstrap. Tôi có thiếu một thẻ ở đâu đó không?

Trang TB chính thức khi được in: Trang Bootstrap Twitter

Trang của tôi khi được in: nhập mô tả hình ảnh ở đây

Trang của tôi thực sự trông như thế nào: nhập mô tả hình ảnh ở đây


2
Bạn đang chỉ định một thuộc tính media = "screen"? Hãy xem câu trả lời của tôi.
albertedevigo

Câu trả lời:


156

Hãy chắc chắn để có một bản định kiểu được chỉ định để in.
Nó có thể là một bản định kiểu riêng biệt:

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

hoặc một bạn chia sẻ cho tất cả các thiết bị:

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

Sau đó, bạn có thể viết kiểu cho máy in trong các bảng định kiểu riêng biệt hoặc trong kiểu được chia sẻ bằng truy vấn phương tiện:

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

29
Tôi vừa thêm cái này: <link rel = "Stylesheet" type = "text / css" media = "print" href = "bootstrap.min.css"> và không cần phải làm gì khác. Làm việc như người ở. Cảm ơn!
Jay Q.

13
Nếu bạn đã sử dụng biểu định kiểu này, rất có thể bạn đang có media="screen"máy in mà máy in sẽ không nhìn thấy. Bạn có thể chuyển cái này sang media="all", hoặc chỉ cần xóa medianhư câu trả lời ở trên cho thấy.
Wex

albertedevigo, tôi cần một số trợ giúp về kiểu dáng. Giống như thay đổi kích thước phông chữ, chiều rộng, ... chính xác những gì cần phải thay đổi? TIA. @JayQ. : Điều đó vẫn còn hoạt động hay lỗi thời? vì tôi không thể làm cho nó hoạt động được.
musafar006

@dreamster, chỉ cần đưa các kiểu của bạn vào biểu định kiểu áp dụng cho in. Lưu ý rằng xếp tầng CSS vẫn hoạt động; vì vậy thứ tự ưu tiên, kế thừa và chọn sẽ ảnh hưởng đến kết quả. Bạn có thể hỏi một câu hỏi mới với mã của riêng bạn.
albertedevigo

181

Cập nhật Bootstrap 3.2: (bản phát hành hiện tại)

Phiên bản Bootstrap ổn định hiện tại là 3.2.0 .
Với phiên bản 3.2 hiển thị in không dùng nữa, vì vậy bạn nên sử dụng như thế này:

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

Cập nhật Bootstrap 3:

Các lớp in hiện có trong tài liệu: 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

Phiên bản Bootstrap 2.3.1:

Sau khi thêm tệp bootstrap.css vào HTML của bạn,
Tìm các phần bạn không muốn in và thêm hidden-printlớp vào thẻ. Bởi vì tập tin css bao gồm điều này:

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

4
Không có lớp nào để hiển thị thứ gì đó trên cả trình duyệt và máy in trong trường hợp tôi làm cho mọi thứ ( body) không hiển thị .hidden-print, nhưng muốn ghi đè một phần tử cụ thể được hiển thị?
Vincent Poirier

1
@VincentPoirier - nếu một phần tử bị ẩn, mọi thứ bên trong nó đều bị ẩn. Vì vậy, nó không có ý nghĩa để che giấu cơ thể, nhưng bỏ ẩn một cái gì đó là một phần của cơ thể. Bởi vì sẽ không có ngữ cảnh (container) để hiển thị phần tử phụ đó. Thay vào đó, hãy thực hiện css để ẩn tất cả các thành phần lá của bạn (ví dụ: đặt một lớp mặc định trên các div bên trong của bạn), sau đó sử dụng lớp css hoặc id thích hợp ở nơi mong muốn được hiển thị. Sẽ có khả năng yêu cầu một số thử nghiệm để có được điều này chính xác.
ToolmakerSteve

112

Thay thế mọi col-md-bằngcol-xs-

ví dụ: thay thế mọi col-md-6đến col-xs-6.

Đây là điều làm việc cho tôi để giúp tôi thoát khỏi vấn đề này, bạn có thể thấy những gì bạn phải thay thế.


Cảm ơn ! Đã có vấn đề với quy mô của chế độ xem HTML so với Chế độ xem In ... mọi thứ đều tốt ngay bây giờ!
David Bélanger

2
Này cảm ơn nhé! Tôi đã phải đối mặt với vấn đề khi in trang của mình, mỗi trang divđược sử dụng để đi dưới trang trước. Câu trả lời này đã cho tôi một gợi ý, tôi đã thêm col-xs-*trước mỗi col-md-*và điều này đã khắc phục vấn đề. TUYÊN BỐ TỪ CHỐI: Tôi đã không kiểm tra việc thêm một container vì <div class="row"></div>điều đó cũng có thể đã giải quyết được vấn đề (có vẻ hiển nhiên).
Fr0zenFyr

6
Trừ khi người ta dự định có bố cục khác cho màn hình hẹp (ví dụ điện thoại) so với in. Có vẻ kỳ lạ là logic máy in bootstrap nghĩ rằng màn hình in của nó quá hẹp.
ToolmakerSteve

3
Điều này nên được đặt lên hàng đầu.
Suraj

Chỉ cần thêm rằng bạn có thể thay thế col-md- như câu trả lời đã nói hoặc bạn chỉ có thể thêm col-xs- like: class = "col-md-6 col-xs-6" và bạn có thể trộn và kết hợp tùy theo yêu cầu thiết kế của bạn.
zaidorx

17

Có một phần @media printmã trong tệp css (Bootstrap 3.3.1 [CẬP NHẬT:] đến 3.3.5), dải này hầu như toàn bộ kiểu dáng, do đó bạn có được bản in khá nhạt nhẽo ngay cả khi nó đang hoạt động.

Hiện tại tôi đã phải dùng đến việc loại bỏ @media printphần từ bootstrap.css - điều mà tôi thực sự không hài lòng nhưng người dùng của tôi muốn lấy màn hình trực tiếp nên bây giờ tôi phải làm điều này. Nếu bất cứ ai biết cách triệt tiêu nó mà không thay đổi các tệp bootstrap, tôi sẽ rất thích thú.

Đây là khối mã 'vi phạm', bắt đầu từ dòng # 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

Tùy chọn tốt nhất tôi tìm thấy là http://html2canvas.hertzen.com/
http://jsfiddle.net/nurburf/1235emen/

html2canvas(document.body, {  
  onrendered: function(canvas) {
    $("#page").hide();
    document.body.appendChild(canvas);
    window.print();
    $('canvas').remove();
    $("#page").show();
  }
});

Tôi đã thử cả 0,4 và 0,5 nhưng cả hai đều không hoạt động. 0,5 đã thêm một số nội dung đẹp mắt sau trang của tôi, nhưng trang gốc vẫn ở đó, và sau đó tôi phải in như thế nào? Thử 0,4 đã kích hoạt một bản in, trang gốc vẫn ở đó và kết xuất bị hỏng.
Csaba Toth

3

Trong trường hợp ai đó đang tìm kiếm một giải pháp cho Bootstrap v2.XX tại đây. Tôi đang rời khỏi giải pháp tôi đang sử dụng. Điều này không được kiểm tra đầy đủ trên tất cả các trình duyệt tuy nhiên nó có thể là một khởi đầu tốt.

1) đảm bảo thuộc tính media bootstrap-responsive.cssscreen.

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

2) tạo một print.cssvà đảm bảo thuộc tính đa phương tiện của nóprint

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

3) bên trong print.css, thêm "chiều rộng" của trang web của bạn trong html & body

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

4.) sao chép các lớp truy vấn phương tiện cần thiết print.cssvì chúng ở bên trong bootstrap-responsive.cssvà chúng tôi đã vô hiệu hóa nó khi in.

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

Đây là phiên bản đầy đủ của 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 điều FYI -

  1. Hiện tại, họ đã thêm một vài lớp chuyển đổi. Xem những gì có sẵn trong bản phát hành ổn định mới nhất - in toggles in responsive-ích.less
  2. Giải pháp mới và cải tiến sắp có trong Bootstrap 3.0 - họ đang thêm một tệp print.less riêng biệt. Xem print.less riêng

0

Để làm cho chế độ xem in trông giống như máy tính bảng hoặc máy tính để bàn, bao gồm bootstrap là .less, không phải là .css và sau đó bạn có thể ghi đè lên các lớp phản hồi bootstrap vào cuối tệp bootstrap_variables như thế này:

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

Đừng lo lắng về việc đặt biến này vào cuối tệp. LESS hỗ trợ lười tải các biến vì vậy chúng sẽ được áp dụng.


0

Nếu bạn muốn giữ các cột trên bản in A4 (khoảng 540px) thì đây là một ý tưởng hay

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

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

Bạn có thể sử dụng nó như thế này:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.