我正在使用 Twitter-Bootstrap,需要能够打印与在浏览器中看到的页面相同的页面。我可以成功地打印其他使用 Twitter-Bootstrap 制作的页面,但是我无法打印纯粹使用 Twitter-Bootstrap 的页面。我是否遗漏了某个标签?
官方 TB 页面打印效果:
我的页面打印效果:
我的页面实际效果:
我正在使用 Twitter-Bootstrap,需要能够打印与在浏览器中看到的页面相同的页面。我可以成功地打印其他使用 Twitter-Bootstrap 制作的页面,但是我无法打印纯粹使用 Twitter-Bootstrap 的页面。我是否遗漏了某个标签?
官方 TB 页面打印效果:
我的页面打印效果:
我的页面实际效果:
目前稳定版本的Bootstrap是3.2.0。
在3.2版本中,visible-print已不建议使用,所以您应该像这样使用:
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
打印类现在在文档中: 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.css文件添加到您的HTML中之后,
找到您不想打印的部分,并将hidden-print
类添加到标签中。
因为CSS文件包含了这个:
@media print {
.visible-print { display: inherit !important; }
.hidden-print { display: none !important; }
}
body
)设为不可见时(使用.hidden-print
),使某个特定元素在浏览器和打印机上都可见?我想修改它的显示。 - Vincent Poirier一定要为打印指定样式表。
这可以是单独的样式表:
<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 */
}
media="screen"
,这对打印机不可见。你可以将其切换为media="all"
,或者像上面的答案建议的那样,直接删除media
。 - Wex将每个col-md-
替换为col-xs-
例如:将每个col-md-6
替换为col-xs-6
。
这是我用来解决问题的方法,你可以看到需要替换什么。
div
都会跑到前一个下面。这个答案给了我一个提示,我在每个 col-md-*
前面添加了 col-xs-*
,然后问题就解决了。免责声明:我没有测试添加一个容器,即 <div class="row"></div>
,可能也可以解决问题(看起来很明显)。 - Fr0zenFyr在 CSS 文件(Bootstrap 3.3.1 [UPDATE:] 至 3.3.5)中有一部分 @media print
代码,它会剥离几乎所有的样式,因此即使它有效,您得到的印刷品也会相当平淡无奇。
目前我不得不将 @media print
部分从 bootstrap.css 中删除 - 虽然我真的非常不高兴,但我的用户想要直接截屏,所以现在只能这样做。如果有人知道如何在不更改 bootstrap 文件的情况下抑制它,我会非常感兴趣。
这里是“有问题”的代码块,从第 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;
}
}
我发现最好的选择是http://html2canvas.hertzen.com/
它能够将网页内容转换为图片,适用于需要在网页上进行截图或生成PDF等场景。同时,它还提供了http://jsfiddle.net/nurbsurf/1235emen/演示示例。
html2canvas(document.body, {
onrendered: function(canvas) {
$("#page").hide();
document.body.appendChild(canvas);
window.print();
$('canvas').remove();
$("#page").show();
}
});
1)确保bootstrap-responsive.css
的媒体属性为screen
。
<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件事情:
为了使打印视图看起来像平板电脑或桌面电脑,请将bootstrap作为.less而不是.css引入,然后您可以在bootstrap_variables文件的末尾覆盖bootstrap响应类,例如:
@container-sm: 1200px;
@container-md: 1200px;
@container-lg: 1200px;
@screen-sm: 0;
@media print {
.make-grid(print-A4);
}
.make-print-A4-column(@columns) {
@media print {
float: left;
width: percentage((@columns / @grid-columns));
}
}