>웹 프론트엔드 >JS 튜토리얼 >WebBrowser를 사용하여 웹 인쇄 문제(백그라운드 인쇄 포함)를 완전히 해결합니다._javascript 기술

WebBrowser를 사용하여 웹 인쇄 문제(백그라운드 인쇄 포함)를 완전히 해결합니다._javascript 기술

WBOY
WBOY원래의
2016-05-16 18:51:081010검색

抱着“取之于众 服务于众”的思想,我总结了一下,把它拿到网上来与大家分享,希望能帮助遇到类似问题的朋友。
我主要使用了IE内置的WebBrowser控件,无需用户下载和安装。WebBrowser有很多功能,除打印外的其他功能就不再赘述了,你所能用到的打印功能也几乎全部可以靠它完成,下面的问题就是如何使用它了。先说显示后打印,后面说后台打印。
1.首先引入一个WebBrowser在需要打印的页面,可以直接添加:


到页面,或者使用JavaScript在需要的时候临时添加也可以:

document.body.insertAdjacentHTML("beforeEnd",
"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 属性,可以分开设置打印和显示的格式。
中间的格式将只在打印时起作用,不会影响显示界面。
所以可以设定

然后给不想打印的页面元素添加: class="Noprint" ,那就不会出现在打印和打印预览中了。
想分页的地方添加:
그게 다야.

4. 페이지의 특정 부분 인쇄
인쇄해야 하는 특정 부분에 대한 새 페이지를 만든 다음 이를 기본 페이지의 IFrame에 로드한 다음 IFrame의 인쇄 메서드를 호출하여 이를 수행합니다. IFrame의 콘텐츠만 인쇄합니다.
예:

다음 springFrame js 함수는 Iframe의 콘텐츠만 인쇄하며 printFrame(FrameId)와 같이 직접 참조할 수 있습니다.

window.print = printFrame
// >function printFrame(프레임, onfinish) {
if ( !frame ) 프레임 = window;
function execOnFinish() {
switch ( typeof(onfinish) ) {
case "string": execScript( onfinish);
case "function": onfinish();
}
if (focused && !focused.disabled ) focus()
}
if (( 프레임 .document.readyState !== "완료") &&( !frame.document.confirm("인쇄할 문서가 아직 다운로드되지 않았습니다. 인쇄를 계속하시겠습니까?") ))
{
execOnFinish()
return ;
}

var eventScope = printGetEventScope(frame);
var focus = document.activeElement;
window.printHelper = function() {
execScript("on 다음 오류 재개: printWB.ExecWB 6, 1", "VBScript");
printFireEvent(frame, eventScope, "onafterprint");
printWB.outerHTML = "";
execOnFinish();
window.printHelper = null;
}
document.body.insertAdjacentHTML("beforeEnd",
"classid="clsid: 8856F961-340A -11D0-A96B-00C04FD705A2">");
printFireEvent(frame, eventScope, "onbeforeprint");
frame.focus()
printHelper; setTimeout(" window.printHelper()", 0);
}

// 헬퍼
function printIsNativeSupport() {
var 에이전트 = window.navigator.userAgent
var i = 에이전트 .indexOf("MSIE ") 5;
return parsInt(agent.substr(i)) >= 5 && Agent.indexOf("5.0b1")
}
function printFireEvent( 프레임, obj, 이름) {
var handler = obj[name];
switch ( typeof(handler) ) {
case "string": 프레임.execScript(handler); 🎜>case "function": handler();
}
}
function printGetEventScope(frame) {
var 프레임셋 = 프레임.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",
"");
var doc = printHiddenFrame.document;
doc.open();
doc.write("" );
doc.write("");
doc. write(" ");
doc.close();
}
function onprintHiddenFrame() {
function onfinish() {
printHiddenFrame.outerHTML = "";
if ( window.onprintcomplete ) window.onprintcomplete();
}
printFrame(printHiddenFrame.printMe, onfinish);
}
printFrame을 사용하므로 인용하는 것을 잊지 마세요. 이전 기능.

요컨대 WebBroswer는 우리에게 솔루션을 제공했기 때문에 필요에 따라 적용하면 됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.