165

我正在使用 Twitter-Bootstrap,我需要能够按照浏览器上的外观打印页面。我可以打印使用 Twitter-Bootstrap 制作的其他页面,但我似乎无法打印使用纯 Twitter-Bootstrap 的页面。我在某处缺少标签吗?

打印时的官方 TB 页面: Twitter 引导页面

打印时我的页面: 在此处输入图像描述

我的页面实际上是什么样的: 在此处输入图像描述

4

9 回答 9

182

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

引导程序 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

引导 2.3.1 版本:

将 bootstrap.css 文件添加到 HTML 后,
找到您不想打印的部分并将hidden-print类添加到标签中。因为 css 文件包含以下内容:

@media print {
  .visible-print  { display: inherit !important; }
  .hidden-print   { display: none !important; }
}
于 2013-05-20T06:17:12.247 回答
158

一定要为打印分配一个样式表。
它可以是一个单独的样式表:

<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 */
}
于 2012-09-06T15:06:31.253 回答
114

将每个替换col-md-col-xs-

例如:将每个替换col-md-6col-xs-6.

这是对我有用的东西,可以让我摆脱这个问题,你可以看到你必须更换什么。

于 2014-11-11T15:22:40.540 回答
17

css 文件中有一段@media print代码(Bootstrap 3.3.1 [更新:] 到 3.3.5),这几乎去掉了所有的样式,所以即使它正在工作,你也会得到相当平淡的打印输出。

现在我不得不@media print从 bootstrap.css 中删除该部分——我真的很不高兴,但我的用户想要直接的屏幕抓取,所以现在必须这样做。如果有人知道如何在不更改引导文件的情况下抑制它,我会非常感兴趣。

这是“违规”代码块,从第 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;
  }
}
于 2014-12-04T16:45:13.187 回答
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();
  }
});
于 2014-11-04T06:38:50.100 回答
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}
于 2015-10-30T09:06:48.813 回答
2

2 件事仅供参考 -

  1. 目前,他们已经添加了一些切换类。查看最新稳定版本中的可用内容 -在 responsive-utilities.less 中打印切换
  2. Bootstrap 3.0 中提供了新的和改进的解决方案——他们正在添加一个单独的 print.less 文件。请参阅单独的 print.less
于 2013-03-28T21:23:26.457 回答
0

要使打印视图看起来像平板电脑或桌面,请将引导程序包含为 .less,而不是 .css,然后您可以在 bootstrap_variables 文件的末尾覆盖引导响应类,例如:

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

不必担心将这些变量放在文件末尾。LESS 支持延迟加载变量,因此它们将被应用。

于 2016-06-02T06:38:44.677 回答
0

如果您想在 A4 打印(大约 540 像素)上保留列,这是一个好主意

@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">

于 2017-03-20T08:50:29.107 回答