5

だから、DOMのChromeとFirefoxの解釈は私を悩ませていると思います。HTMLページの印刷ではヘッダーとフッターを通常印刷できないため、ブラウザからPDFを印刷しようとしています(動的に作成された)。今、私はPHPページからfpdfを使用してPDFを送信し、ツールバーを使用するか、右クリックして印刷しましたが、クライアントは印刷ダイアログを開始するページ上のボタンを必要としていますが、もちろんPDF以外は印刷しません... . だから私はそれを埋め込みました:

    <embed
        type="application/pdf"
        src="print_pdf.php"
        id="pdfDocument"
        width="100%"
        height="100%" />

ボタンの onClick が呼び出されます

    <script type="text/javascript">

        function printDocument(documentId) {

        ((function(){return document.getElementById(documentId);})()).print();


        //Wait until PDF is ready to print    
        if (typeof document.getElementById(documentId).print == 'undefined') {

            setTimeout(function(){printDocument(documentId);}, 1000);

        } else {

            var x = document.getElementById(documentId);
            x.print();
        }
    }
    </script>

どこで documentID = "pdfDocument"

これはIE9ではうまく機能しましたが、chromeとmozillaはすべて「Uncaught TypeError: Object # has no method 'print'」と言います

だから私は、埋め込みがクロムで不適切なオブジェクト解釈を引き起こしていると考えて使用しようとしました:

<object data="print_pdf.php" type="application/pdf" width="100%" height="100%" id="pdfD2">

代替 : test.pdf

同じ onClick を呼び出しました。ここで、documentID = "pdfD2"... "Uncaught TypeError: Object # has no method 'print'"

次に、Iframe を試してみました: ... "Uncaught TypeError: Object # has no method 'print'"

Chrome が私の行き先であることを考えると、私はとてもイライラしています... Chrome の組み込みの PDF ビューを無効にして、Adobe 10.xxx を使用しました.. ARGH!!!

参考までに、私の単純なボタンタグは次のとおりです。

<input type="button" value="Print Rx" onclick="printDocument('pdfDocument')">
<input type="button" value="Print Rx2" onclick="printDocument('pdfD2')">
<input type="button" value="Print Rx3" onclick="printDocument('pdfD3')">
4

1 に答える 1

0

エラーは次の行にあると思います:

((function(){return document.getElementById(documentId);})()).print();

これは、(おそらく) 未完成の DOM をクロージャに「パック」することを意味します。

「未定義」の印刷をチェックする次の行の前に移動します。

これとは別に、なぜイベントを使用onloadするだけでなく、タイムアウトを使用するのですか?DOMReady

于 2012-11-29T10:45:05.927 に答える