ホームページ >ウェブフロントエンド >jsチュートリアル >Webブラウザを使用してWeb印刷の問題を完全に解決する(バックグラウンド印刷を含む)_JavaScriptスキル

Webブラウザを使用してWeb印刷の問題を完全に解決する(バックグラウンド印刷を含む)_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 18:51:081018ブラウズ

抱着“取之于众 服务于众”的思想,我总结了一下,把它拿到网上来与大家分享,希望能帮助遇到类似问题的朋友。
我主要使用了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 の print メソッドを呼び出します。 IFrame 内のコンテンツのみを出力します。
例:

次の springFrame js 関数は、Iframe 内のコンテンツのみを出力し、printFrame(FrameId); のように直接参照できます。

window.print = printFrame; >function printFrame (frame, onfinish) {
if ( !frame ) Frame = window;
function execOnFinish() {
switch ( typeof(onfinish) ) {
case "string": execScript( onfinish); ブレーク;
case "関数": onfinish();
if (focused && !focused.disabled )
}
if (( フレーム) .document.readyState !== "complete") &&( !frame.document.confirm("印刷するドキュメントはまだダウンロードされていません。印刷を続行しますか?") ))
{
execOnFinish(); 🎜>return ;
}

var eventsScope = printGetEventScope(frame);
var focused = document.activeElement;
execScript("エラー再開次 : 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");
window.printHelper = printHelper; setTimeout(" window.printHelper()", 0);
}

// ヘルパー
function printIsNativeSupport() {
var エージェント = window.navigator.userAgent; i = エージェント .indexOf("MSIE ") 5;
return parseInt(agent.substr(i)) >= 5 && Agent.indexOf("5.0b1")
function printFireEvent(frame, obj, name) {
var handler = obj[name];
switch ( typeof(handler) ) {
case "string":frame.execScript(handler); 🎜>case "関数": 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",
"");
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 までご連絡ください。