利用WebBrowser彻底解决Web打印问题(包括后台打印) 收藏
BS架构下的打印大家是怎么解决的呢,我最近作了一个项目正好负责这一块,不仅要求打印页面的特定部分,还要求有后台的批量打印,在网上查了一些资料,最后终于解决了。抱着“取之于众 服务于众”的思想,我总结了一下,把它拿到网上来与大家分享,希望能帮助遇到类似问题的朋友。
我主要使用了IE内置的WebBrowser控件,无需用户下载和安装。WebBrowser有很多功能,除打印外的其他功能就不再赘述了,你所能用到的打印功能也几乎全部可以靠它完成,下面的问题就是如何使用它了。先说显示后打印,后面说后台打印。
1.首先引入一个WebBrowser在需要打印的页面,可以直接添加:
<object id="WebBrowser" classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height="0" width="0">
</object>
到页面,或者使用JavaScript在需要的时候临时添加也可以:
document.body.insertAdjacentHTML("beforeEnd",
"<object id=\"WebBrowser\" width=0 height=0 \
classid=\"clsid:8856F961-340A-11D0-A96B-00C04FD705A2\">");
2 .页面设置和打印预览
如下所示,直接调用即可
document.all.WebBrowser.ExecWB(6,6) 直接打印
document.all.WebBrowser.ExecWB(8,1) 页面设置
document.all.WebBrowser.ExecWB(7,1) 打印预览
或者:
execScript("document.all.WebBrowser.ExecWB 7, 1","VBScript");
3 隐藏不打印的页面元素和分页
CSS 有个Media 属性,可以分开设置打印和显示的格式。
如 <style media="print" type="text/css"> …</style> 中间的格式将只在打印时起作用,不会影响显示界面。
所以可以设定
<style media="print" type="text/css">
.Noprint{display:none;}
.PageNext{page-break-after: always;}
</style>
然后给不想打印的页面元素添加: class="Noprint" ,那就不会出现在打印和打印预览中了。
想分页的地方添加: <div class="PageNext"></div> 就可以了。
4.打印页面的特定部分
我是通过将需要打印的特定部分另建一个页面,然后装入主页面的一个IFrame中,再调用IFrame的打印方法,只打印IFrame中的内容实现的。
如:
<iframe style="visibility: visible" name="FrameId" width="100%" height="30%" src="NeedPrintedPage.asp"></iframe>
下面的pringFrame js函数将只打印Iframe中的内容,可以直接引用使用,如printFrame(FrameId);
window.print = printFrame;
// main stuff
function printFrame(frame, onfinish) {
if ( !frame ) frame = window;
function execOnFinish() {
switch ( typeof(onfinish) ) {
case "string": execScript(onfinish); break;
case "function": onfinish();
}
if ( focused && !focused.disabled ) focused.focus();
}
if (( frame.document.readyState !== "complete") &&( !frame.document.confirm("The document to print is not downloaded yet! Continue with printing?") ))
{
execOnFinish();
return;
}
var eventScope = printGetEventScope(frame);
var focused = document.activeElement;
window.printHelper = function() {
execScript("on error resume next: printWB.ExecWB 6, 1", "VBScript");
printFireEvent(frame, eventScope, "onafterprint");
printWB.outerHTML = "";
execOnFinish();
window.printHelper = null;
}
document.body.insertAdjacentHTML("beforeEnd",
"<object id=\"printWB\" width=0 height=0 \
classid=\"clsid:8856F961-340A-11D0-A96B-00C04FD705A2\">");
printFireEvent(frame, eventScope, "onbeforeprint");
frame.focus();
window.printHelper = printHelper;
setTimeout("window.printHelper()", 0);
}
// helpers
function printIsNativeSupport() {
var agent = window.navigator.userAgent;
var i = agent.indexOf("MSIE ")+5;
return parseInt(agent.substr(i)) >= 5 && agent.indexOf("5.0b1") < 0;
}
function printFireEvent(frame, obj, name) {
var handler = obj[name];
switch ( typeof(handler) ) {
case "string": frame.execScript(handler); break;
case "function": handler();
}
}
function printGetEventScope(frame) {
var frameset = frame.document.all.tags("FRAMESET");
if ( frameset.length ) return frameset[0];
return frame.document.body;
}
Iframe中所装载页面的打印效果在所装载页面设置就可以了,如分页等。
5.后台打印
我是通过建一个隐藏Iframe实现的,当然仍然会有页面装载的过程。
下面的函数创建Iframe装载页面并打印。如 printHidden(url) //url为页面地址
function printHidden(url) {
document.body.insertAdjacentHTML("beforeEnd",
"<iframe name=printHiddenFrame width=0 height=0></iframe>");
var doc = printHiddenFrame.document;
doc.open();
doc.write("<body onload=\"parent.onprintHiddenFrame()\">");
doc.write("<iframe name=printMe width=0 height=0 src=\"" +
url + "\"></iframe>");
doc.write("</body>");
doc.close();
}
function onprintHiddenFrame() {
function onfinish() {
printHiddenFrame.outerHTML = "";
if ( window.onprintcomplete ) window.onprintcomplete();
}
printFrame(printHiddenFrame.printMe, onfinish);
}
它用到了printFrame,所以别忘了引用前面的函数。
总之,WebBroswer已经为我们提供了解决方案,我们只要结合需求把它应用好就行了。
分享到:
相关推荐
为了更好地利用楚琳Web打印控件,开发者需要具备一定的JavaScript编程基础,因为大部分与控件的交互都是通过JavaScript进行的。同时,熟悉HTML和CSS也非常重要,因为这两者决定了网页的结构和样式,从而影响打印效果...
JAVA的Web打印方式详解 JAVA的Web打印方式是指在Web应用程序中实现打印功能的各种方法和技术。本文将主要介绍使用PageOffice、POI、jacob、html打印等方式来实现Web打印。 一、使用浏览器自带的打印功能直接打印 ...
Web打印和打印预览是网页开发中的重要组成部分,它们允许用户在正式打印前查看文档的打印效果,确保格式正确无误。在这个过程中,开发者通常会利用浏览器提供的API和CSS技术来实现这一功能。下面我们将详细探讨这个...
在数字化办公环境中,Web打印设置成为了不可或缺的一部分,它使得网页内容能够被轻松地转换成纸质文档,满足了用户在不同场景下的需求。本文将深入探讨Web打印设置的几种常见方法,包括直接页面设置打印、利用IE...
在IT行业中,Web打印是一个重要的领域,特别是在企业管理和办公自动化中。...组件的各个组成部分协同工作,从打印逻辑处理、报表设计到错误处理和接口定义,为开发者和最终用户提供了一个高效、易用的Web打印平台。
在Web开发中,实现网页打印功能是常见的需求,特别是在企业级应用中,用户可能需要将网页内容导出或打印为纸质文档。本篇文章将详细探讨如何在C#和.NET平台上实现这一功能,尤其是如何允许用户选择打印特定的区域。 ...
在互联网日益普及的今天,Web打印成为个人和企业日常工作中不可或缺的一部分。本文将深入探讨Web打印的三种主要方法:直接浏览器打印、使用JavaScript控制打印和通过云打印服务。 一、直接浏览器打印 直接浏览器...
Java打印预览和Web打印是开发中经常遇到的需求,尤其在企业级应用或者网页服务中。本文将深入探讨如何在Java环境中实现这两种功能,并提供一个名为`JpdPreview`的工具包来帮助开发者轻松实现这一目标。 首先,让...
在IT行业中,Web打印是一种常见的需求,特别是在网页应用和企业内部系统中。"web打印 demo"这个项目就是针对这一需求的一个实例,它演示了如何在Web环境中实现便捷、高效的打印功能。下面将详细阐述其中涉及的关键...
Web打印在现代网络应用中扮演着重要角色,它允许用户将网页内容转化为纸质形式或PDF文档,方便保存和分享。本文将深入探讨Web打印的原理、实现方式以及优化技巧。 一、Web打印基础 1.1 原理:Web打印主要依赖...
Web打印技术是网页应用中实现文档输出的一种方法,它允许用户在浏览器环境下直接将网页内容或者特定区域的内容发送到打印机进行打印。在这个压缩包“web打印两种.rar”中,我们可能会发现两种不同的Web打印控件方式...
楚琳Web打印控件是一款专为网页应用设计的打印解决方案,它使得用户可以在浏览器环境中方便地进行文档打印,而无需依赖特定的打印机驱动程序。这款控件极大地简化了Web应用程序中的打印功能,提供了友好的用户体验。...
Web打印方法是将这些本地报表在网页环境中进行打印的功能,这对于那些需要从Web应用中导出或打印报表的用户来说非常实用。下面将详细介绍微软本地报表Web打印的方法及其相关知识点。 首先,我们需要了解微软本地...
Web打印控件是一种在网页上实现打印功能的技术解决方案,它使得用户无需下载或安装额外的软件,即可直接从浏览器中打印网页内容。在Asp.net框架下,这种控件能够帮助开发者集成打印功能,为用户提供方便快捷的服务。...
在文件名列表中,"简单方便的web打印编辑器"可能包含源代码文件、样式表、JavaScript脚本、配置文件、示例文档等资源,这些都是构建这样一个编辑器必不可少的部分。开发者可以通过阅读这些文件来理解编辑器的工作...
5. **自定义打印范围**:如果只想打印特定部分的网页内容,可以使用`window.print()`方法的`window.document.getElementById('element-id').innerHTML`来指定打印区域。 ```javascript var printContent = document...
分页是批量打印中的关键部分,尤其是当每个报告单需要单独占一页时。在HTML和CSS中,可以使用以下技巧进行分页控制: 1. CSS `@media print` 查询:针对打印媒体类型定义不同的样式,比如设置页眉和页脚,以及分页...
**WEB打印控件Lodop技术手册DEMO详解** 在当今的互联网应用中,打印功能是不可或缺的一部分。Lodop,全称为“LODOP Web打印控件”,是一款专为网页设计的打印解决方案,旨在提供简便、高效且功能丰富的打印服务。本...