2011-11-08 10 views
7

私たちのウェブアプリケーションでは、私たちのページのいくつかの印刷機能があります。私たちが取るアプローチは、現在利用可能なiframeのページに現在のページのコンテンツを置くことです(JavaScriptを使用して)iframeを文書化して印刷します。これはFirefoxではまったく問題なく動作しますが、IEではiframeを非常に小さなフォントで印刷し、ほとんど読めません。iframe.print vs. window.print in IE - 小文字の

両方のブラウザに適用されているすべてのCSSが同じで、印刷されているHTMLが何らかの方法でオーバーフローしていないことを保証しています。興味深いことに、印刷ロジックを変更して新しいウィンドウに書き込んだ後にwindow.print()を実行すると、IEでもすべて正常に動作し、フォントはCSSによって要求/指定された大きさになります。

誰もIEのiframe.print()で同様の問題に直面しましたか?

ありがとうございました。

ニティン

+0

印刷に固有のCSSはありますか? –

+0

最初は持っていませんでしたが、助けなしに作成しました。特定の印刷でも、CSS IEはiframeを小さなフォントで印刷します。 – legendofawesomeness

答えて

1

はい、私たちは同じことを見ています。同じページを直接開くと、期待どおりに印刷されます。 iframeに読み込まれて印刷されると、すべてが小さくなります。フォントだけではありません。

これは)(代わりにiframe.printの)私が採用最終的な解決策は、(window.printを使用していたのWindows 7上

4

同じ問題で取り組んだ後、このスレッドが見つかりました。 IE11でもこの動作が続くようです。良いニュースは、新しいウィンドウを開き、window.print()を呼び出すことなく解決策を見つけることができたことです。

トリックは、IEでdocument.execCommandを使用しています(IE11まで動作します)。他のブラウザではiframe.print()に正常にフォールバックします。完全なソリューションは、このようなものになります(インラインフレームを選択するために、jQueryのを使用し、それは完全にオプションです):

var target = $('iframe')[0]; 
try { 
    target.contentWindow.document.execCommand('print', false, null); 
} catch(e) { 
    target.contentWindow.print(); 
} 

このソリューションはここからIE7についての非常に古いスレッドに触発された:http://bytes.com/topic/misc/answers/629926-ie7-printing-iframe-solutionを。しかしそれはまだ関連しています。

+0

IE 11.0.9600.16659でこれが動作しませんでした。 iframeの内容を印刷しようとするとフォントサイズがまだ小さいです。 – justanotherprogrammer

+1

プログラミング以外の面からは、設定 - >印刷 - >ページ設定に行き、「縮小を有効にする」チェックボックスをオフにすると、テキストサイズが通常のサイズに戻りました。 – justanotherprogrammer

+0

解決策はFirefoxでは動作しません。参照してください[contentWindow.document。execCommand( 'print'、false、null)はFirefoxで動作しません](http://stackoverflow.com/questions/25323371/contentwindow-document-execcommandprint-false-null-not-working-in-firefox)。私はChromeとIEでテストソリューションのエラーを作りましたが、この問題は解決しましたが、コードをリリースして制作するまで、FFを壊すことはわかりませんでした。愚かな私。 – Karl

0

「Heston Liebowitz」が書いたように、「execCommand」の使用は良いアイデアと解決策です。しかし、私はこの問題がIEの場合にのみ現れるため、IEのif条件を設定します。以下は私の提案です:

// Get the iframe element 
var oIFrame = $('#iF_Print').get(0); 
// Fix for IE : Allow it to render the iframe 
oIFrame.focus(); 

var bMS_IE = false; 
// Verify whether the browser is Internet Explorer (IE8,IE9,IE10 -> "msie", but for IE11 the name is changed into "trident"). 
var userAgent = window.navigator.userAgent.toLowerCase(); 
bMS_IE = ((userAgent.indexOf('msie ') > -1) || (userAgent.indexOf("trident/") > -1))?true:false; 

if (bMS_IE) { 
     try { 
      oIFrame.document.execCommand('print', false, null); 
     }catch(e) { 
      window.print(); 
     } 
}else { 
    oIFrame.print(); 
} 
3

は今日IEの問題に小さなプリントを持っていた、と私は単にので、私の印刷機能を調整する修正する:

$(document).ready(function(){ 
$("#printFrame").click(function(){  
    if (document.queryCommandSupported('print')) 
    { 
     $("#iframe").get(0).contentWindow.document.execCommand('print', false, null); 
    } 
    else 
    { 
     $("#iframe").get(0).contentWindow.focus(); 
     $("#iframe").get(0).contentWindow.print(); 
    } 
    }); 
}); 

今では上の同じをプリントアウトしているようですIE、Chrome、Firefoxこのソリューションは私が見つけるのが難しかったので、ここに投稿しました。うまくいけば、これは誰かを助けるでしょう。