解决jQuery打印插件printArea不显示样式或图片的问题

jQuery有个局部打印的插件 PrintArea,采用的是JSON配置,可以通过popup或者iframe的方式来呈现,使用起来非常简单。

相关网址

官网下载:http://plugins.jquery.com/PrintArea/

GitHub示例:https://github.com/RitsC/PrintArea

使用方法也非常简单,但有几点需要注意的,我们一起来看看!

使用方法

1、引入 jquery.js 和 jquery.printarea.js 文件

2、在需要打印的区域,添加一个最外层div

比如

<div id="print-area">
    这里是要打印的区域
</div>

3、在打印区域代码后,加上如下JS代码

<script>
$('#print-area').printArea();
</script>

接下来就点击 print-area 按钮就可以实现局部打印了。

拓展一下

从 github 示例代码中看出,这个printArea(),是可以添加很多参数的,比如

vardefaults = {
	mode : modes.iframe,
	standard : standards.html5,
	popHt : 500,
	popWd : 400,
	popX : 200,
	popY : 200,
	popTitle : '', //打印窗口标题
	popClose : false,
	extraCss : '',
	extraHead : '',
	retainAttr : ["id", "class", "style"]
};

$('#print-area').printArea( vardefaults );

打印样式问题

最后我们来聊一聊打印中出现的几个问题,比如打印页面空白,打印页面不显示样式,打印页面不显示图片或者不显示背景图片(background设置的图片)等等问题,这里按老杨最近实操中出现的问题,给出几个参考解决方案,可一一实验。

1、要想打印出样式,需要将样式放在需要打印的内容内,也就是上面第2步中的div内包含着。样式可以写在

中,也可以直接 也行,如果不想跟显示的样式冲突,可以添加 print 参数

<link type="text/css" rel="stylesheet" href="<?php echo plugins_url('../static/css/ywm-print.css', __FILE__); ?>" media="print" />
<style type="text/css" media="print"> 
#header, #footer, .banner{display:none}
.print{padding:20px 0px;}
</style>

2、页面加载开第一时间不要着急打印,耐心等图片加载完毕。

3、老杨在实操中采用步步删除的debug方式,发现插件与 bootstrap.min.css 有冲突,删除 bootstrap.min.css 引用文件后,打印样式正常、图片也正常。如果不想删除 bootstrap.min.css 文件,可以为其添加一个 media 属性,让它只影响屏幕显示样式,不影响print打印效果。

<link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.min.css?ver=17.2" type="text/css" media="screen">

其他待有空再更新,如有新的冲突或解决方案,欢迎各位交流!