美文网首页
前端实现打印功能

前端实现打印功能

作者: goodluckall | 来源:发表于2019-10-31 15:44 被阅读0次

打印样式

一、添加打印样式

  1. 为屏幕显示和打印分别准备一个css文件,如下所示:
    用于屏幕显示的css: <link rel="stylesheet" href="css/mainstylesheet.css" media="screen" />
    用于打印的css:<link rel="stylesheet" href="css/printstylesheet.css" media="print" />

  2. import方式:
    <style type="text/css">
    @import url("css/printstylesheet.css") print;
    </style>

  3. 直接把屏幕显示样式和打印样式写在一个css文件中:
    @media print {}{
    h1 {
    color: black;
    }
    h2 {}{
    color: gray;
    }
    }
    @media print里面的内容只对打印出来的内容有效,之外的内容就是屏幕显示的样式。

其他:
创建一个不指定媒体类型的样式表通常很有用(或者利用media="all")。当你准备好定义一些特别用于打印的规则时,可以只创建一个单独的样式表,使任何在打印时看起来不好的样式都失效。使用这种方法的一个问题是必须确保打印机样式实际上确实覆盖了主样式表。可以使用!important.

二、打印样式注意事项:

  1. 打印样式中不推荐使用背景,因为浏览器默认情况下并不能打印出CSS中的背景内容,只有当浏览器被设置可以打印背景的情况下才能打印出背(ie的高级选项中可选)。即使背景可以打印,它也可能盖过叠在它上面的任何文本。尤其对于用彩色背景在显示器上强烈对比的文本,但是在黑白打印机上打印时会融合这一背景background:none;去掉背景图片和颜色。可以利用background-color属性设置背景颜色为白色,像这样:background-color: white。 使用background的快捷法也可以获得相同的效果:background: white。因此像background: white;这样的声明不仅设置了背景颜色为白色,而且消除了所有背景图片。利用这个background的快捷属性,你实现了两个目的——设置了一个白色背景,并消除了图片——只用很少的代码。

  2. 如果需要在打印内容中出现图片,请在HTML代码中加入。

  3. 打印设置使用的是物理单位,所以尺寸最好不要用像素(px),可以用pt也可以用cm;

  4. 隐藏不需要的或是次要的内容。display:none;

  5. 尽量不要让内容浮动,有些浏览器打印浮动的div的过程中,会有一个麻烦,需要特别加以注意。 不要在打印的样式表中浮动的块,像这样:float: none;。例如,基于Gecko的浏览器
    (例如Netscape 6+),当用户用它来浏览一个打印输出页面时,它会截去浮动元素中的内容。这些内容就不会被传送到打印机,下一个页面也不会有它的踪影――它消失了。

  6. 尽可能的在HTML代码中做好内容重要的先后次序,这样在打印样式中可以节省不少的麻烦。

  7. 打印与网页不一样,打印一定要留下白边,单位用英寸(in)。

  8. 要确保页面上的所有文本以黑色打印,就用通配选择器(见第54页)和!important来创建把每个标签都格式化为黑色文本的单个样式:*{ color: ##000# !important }

  9. 在打印中显示链接url的信息:利用一个高级的选择器:after和一个高级的CSS属性称作content,把不在屏幕上显示的文本打印在一个样式元素的末端。
    不幸的是,:after选择器和content属性技巧在Internet Explorer 6或者更早的版本上不起作用(到编写本书为止,在IE 7上也不行)。但是它在Firefox和Safari上的确可以,因此你至少可以清楚地说明URL以便访问者可以使用他们的浏览器。
    为了做到这点,给打印样式表添加一个样式,在每个链接后面打印出URL。你甚至可以添加其他文本项目比如圆括号,使它更好看些: a:after {content: " (" attr(href) ") ";}

然而,这个CSS不区分外部或者内部的链接,因此它也打印出到达同一个网站其他页面的没用的相对文档链接:“访问主页(../../index. html)。”利用一点点CSS 3魔法,就可以强制这个样式只打印绝对的URL(即以http://开头的那些),像这样:
a[href^="http://"]:after {content: " (" attr(href) ") ";}

10.给打印添加分页符:两种被广泛认可的属性是page-break-before和page-break-after。
page-break-before告诉网页浏览器在一个指定样式之前插入一个分页符。利用page-break-before 属性使图片打印在一张新页面上,并且适合整张页面。要使一个元素作为打印页上的最后一个项目显示,就给那个元素的样式添加page-break-after: always。

创建两个类样式,以类似于.break_after和.break_before的名字来命名,像这样:
.break_before { page-break-before: always; }
.break_after { page-break-after: always; }

然后你可以选择性地把这些样式应用给应该打印在网页顶部或者底部的元素。

三、测试打印样式
通常来说我们不可能用打印机来进行测试,在IE浏览器菜单栏“文件”中有“打印预览”,谷歌浏览器也可以,可以通过这打印预览来做测试。

打印实现

方式一:直接使用window.print();

(1)首先获得元素的html内容(这里建议如果有样式最好是用内联样式的方式)

var newstr = document.getElementById(myDiv).innerHTML;//得到需要打印的元素HTML

(2)保存当前页面的整个html,因为window.print()打印操作是打印当前页的所有内容,所以先将当前页面保存起来,之后便于恢复。

var oldstr = document.body.innerHTML;//保存当前页面的HTML

(3)把当前页面替换为打印内容HTML

document.body.innerHTML = newstr;

(4)执行打印操作

window.print();

(5)还原当前页面

document.body.innerHTML = oldstr;

方法例:

//myDiv为需要打印的元素ID

function printpage(myDiv){
var newstr = document.getElementById(myDiv).innerHTML;
var oldstr = document.body.innerHTML;
document.body.innerHTML = newstr;
window.print();
document.body.innerHTML = oldstr;
return false;
}

方式二:window.open("",..)新开浏览器对话框打印。

(1)获得需要打印的元素HTML

var printHtml = document.getElementById("myDiv").innerHTML;//这个元素的样式需要用内联方式,不然在新开打印对话框中没有样式

(2)打开一个窗口,且内容设置为空。

var wind = window.open("",'newwindow', 'height=300, width=700, top=100, left=100, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no');

(3)将新窗口内容填充为需要打印的HTML内容

wind.document.body.innerHTML = printHtml;

(4)打印

wind.print();

方法例:

//myDiv为需要打印的元素ID

function printpage(myDiv){
var printHtml = document.getElementById(myDiv).innerHTML;

var wind = window.open("",'newwindow', 'height=300, width=700, top=100, left=100, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no');

wind.document.body.innerHTML = printHtml;

wind.print();
return false;
}

带有echart图的打印

方法:将echart装换成base64,追加到相应的打印document中,按照图片格式打印出来

 // 获取echarts图的base64编码
        var picBase64Info = myChart.getDataURL();
        // 添加img标签 crossorigin='anonymous',
        $('#airPic').before("<img src='"+picBase64Info+"' >");

相关文章

  • 前端实现打印功能

    打印样式 一、添加打印样式 为屏幕显示和打印分别准备一个css文件,如下所示:用于屏幕显示的css: 用于打印的...

  • 前端打印

    简单介绍一下前端打印的做法和一些问题 一、简介 前端打印即浏览器打印,是通过浏览器的打印功能来实现打印效果的做法。...

  • 前端vue项目实现单页打印功能

    前端vue项目实现单页打印功能 vue-print-nb插件:这是用于打印,简单,快速,方便,轻便的指令包装。安装...

  • 前端页面局部打印功能实现

    先看打印的效果 网上找到的实现如下: doPrint (){ //获取当前页的html代码 varbdhtml=w...

  • 前端实现打印功能(筛选打印表格)

    前端实现打印也并没有那么难。起初是后端实现打印,前端调取接口,但无法实现单选框的样式,无法对数据进行筛选,这才选择...

  • 【vue学习】整合Lodop

    前端实现自动打印 批量打印 vue中使用lodop调用标签打印机 利用lodop打印控件轻松实现批量打印 本文主要...

  • 前端vue项目实现批量打印功能

    在项目中遇到一个问题需要实现单页打印和批量打印功能,研究了测试了一番解决了,把相关的功能记录下,方便自己以后查阅,...

  • CSS 打印功能

    相关资料参考: 如何在 css 中设置打印分隔页: 参考资料: CSS 打印 前端打印功能css print

  • iOS 打印 AirPrint无线打印

    主要功能:使用iPhone、PC连接同一个WiFi,iPhone 上App有打印功能,点击打印,实现打印文档功能。...

  • vue 实现打印功能

    1.安装插件 2.在main.js中引用 3.在页面中使用

网友评论

      本文标题:前端实现打印功能

      本文链接:https://www.haomeiwen.com/subject/tydtbctx.html