如何创建可打印的Twitter-Bootstrap页面


162

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

印刷时的官方结核病页面: Twitter引导页面

我的页面在打印时: 在此处输入图片说明

我的页面实际上是什么样的: 在此处输入图片说明


2
您是否要指定media =“ screen”属性?看看我的答案。
albertedevigo 2012年

Answers:


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 '16

@dreamster,只需在适用于打印的样式表中包括您的样式即可。请注意,CSS级联仍然有效。因此顺序,继承和选择器优先级将影响结果。您可能会用自己的代码问一个新问题。
albertedevigo '16

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/#sensitive-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 2015年

1
@VincentPoirier-如果元素被隐藏,则其中的所有内容都被隐藏。因此,隐藏身体没有任何意义,但是取消隐藏作为身体一部分的东西。因为将没有上下文(容器)显示该子元素。而是使用CSS隐藏所有叶子元素(例如,在内部div上放置默认类),然后在需要显示的地方使用适当的CSS类或ID。可能需要进行一些实验才能完全正确。
ToolmakerSteve

112

替换col-md-col-xs-

例如:将所有替换col-md-6col-xs-6

这是对我有用的东西,它使我摆脱了这个问题,您可以看到必须替换的东西。


谢谢 !与打印视图相比,HTML视图的比例有问题...现在一切都很好!
DavidBélanger15年

2
嘿,谢谢!打印页面时我遇到了问题,每个页面都div低于上一页。这个答案给了我一个提示,我col-xs-*在每次添加之前都添加了一个col-md-*,这解决了这个问题。免责声明:我没有测试添加一个容器,因为<div class="row"></div>它也可能解决了问题(似乎很明显)。
Fr0zenFyr 2015年

6
除非打算在窄屏(例如电话)上使用与打印不同的布局。引导打印机逻辑认为其打印屏幕如此狭窄似乎很奇怪。
制造商

3
这应该在顶部。
Suraj 2015年

只需添加即可按答案所示替换col-md-,也可以仅添加col-xs-:class =“ col-md-6 col-xs-6”,并且可以根据要求进行混合和匹配您的设计。
zaidorx

17

@media printcss文件中有一段代码(Bootstrap 3.3.1 [UPDATE:]至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;
  }
}

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 2015年

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}


0

要使打印视图看起来像平板电脑或台式机,请将bootstrap设置为.less,而不是.css,然后可以在bootstrap_variables文件的末尾覆盖bootstrap响应类,例如:

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

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


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.