以chrome格式打印嵌入的PDF

时间:2012-11-29 08:45:33

标签: javascript google-chrome

所以我认为Chrome和Firefox对DOM的解释与我有关。我正在尝试从浏览器(动态创建)打印pdf,因为我不能打印通常打印HTML页面的页眉和页脚。现在我只是从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#没有方法'print'”

因此我尝试使用思维嵌入导致chrome中的不正确的对象解释:

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

alt:test.pdf

并调用相同的onClick,其中documentID =“pdfD2”......“未捕获TypeError:对象#没有方法'打印'”

然后我尝试了一个iframe:     ...“Uncaught TypeError:Object#没有方法'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')">

1 个答案:

答案 0 :(得分:0)

我认为错误就在行中:

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

这意味着您将(未完成的)未完成的DOM“打包”到闭包中。

它在下一行检查“未定义”打印之前。

除此之外,为什么要使用超时,而不只是使用onloadDOMReady事件?