2013-01-11 133 views
5

我有一個pdf與一個按鈕相關聯。當我點擊按鈕時,我想要打印pdf。這是我的按鈕是如何編碼:如何在Google Chrome中打印PDF?

<input type="submit" class="btn-red" value="Print" 
name="Submit" id="printbtn" 
onclick="printPDF('http://www.irs.gov/pub/irs-pdf/fw4.pdf')" /> 

現在我的打印功能的工作原理是這樣的:

function printPDF(pdfUrl) 
    { 

    if ((navigator.appName == 'Microsoft Internet Explorer')) 
    window.print(pdfUrl,"_self"); 
    else 
    { 
    var w = window.open(pdfUrl,"_self"); 
    w.print(); 
    w.close(); 
    } 
    } 

的問題是,它在IE和火狐工作正常,但在Chrome中不工作。在ie和Firefox中,它打開了xps打印機選項,但在chrome中,它只是打開一個新的打印窗口,打印預覽div而不是pdf。但是我想在這裏打開xps選項。

編輯:在Chrome中,當我嘗試打印時,只有html元素作爲預覽而不是pdf。我使用的是鍍鉻版本:20.0.1132.57

我該如何解決這個問題?善意幫助。

回答

4

我不得不做同樣的事情,我用了一種不同的方法,一種是針對我在Chrome和Firefox中工作的方法。

我的解決方案涉及一個print.html幫助程序文件,它接收PDF文件的url作爲GET類型參數,然後將pdf加載到iframe中。然後它不斷檢查pdf是否已經完全加載(綁定檢查到onload事件不起作用),並在完成時觸發了打印方法。

這裏:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1"> 

    <title>Print Page</title> 

    <meta name="title" content="Print" /> 

    <script> 

    (function (window, document, undefined) { 


     var printy = { 

       urlGET: function (param) { 

        var params = document.URL.split('?'); 

        if(params.length > 1) { 
         params = params[1].split('&'); 

         for (var i = 0, len = params.length; i < len; i++) { 
          if (params[i].split('=')[0] === param) { 
           return params[i].split('=')[1]; 
          } 
         } 
        } 

        return null; 
       }, 


       init: function() { 

        var self = this; 

        window.onload = function() { 

         var src = self.urlGET('path'); 

         //creating an iframe element 
         var ifr = document.createElement('iframe'); 
         document.body.appendChild(ifr); 

         // making the iframe fill the viewport 
         ifr.width = '100%'; 
         ifr.height = window.innerHeight; 

         // continuously checking to see if the pdf file has been loaded 
         self.interval = setInterval(function() { 

          if (ifr.contentDocument.readyState === 'complete') { 
           clearInterval(self.interval); 
           // doing the actual printing 
           ifr.contentWindow.print(); 
          } 
         }, 100); 

         ifr.src = src; 
        } 
       } 
      } 

      printy.init(); 

    })(window, document, undefined); 
    </script> 

</head> 
<body> 
</body> 
</html> 

該溶液不能在IE測試雖然。我們在工作中使用Mac,所以它不是一種選擇。

爲了做印刷的,我用它通過調用像這樣的URL:http://example.com/print.html?path=docs/myfile.pdf

+0

感謝分享。將檢查出來,讓你知道,它是否適用於我。 –

4

這工作對我來說,並不需要一臺主機的HTML文件。關鍵是要等待的onload:

對於這樣一個鏈接:

<a class="print-pdf-link" href="/your/pdf.pdf">Print PDF</a> 

我用的javascript:

$('a.print-pdf-link').click(function() { 
    var w = window.open($(this).attr('href')); 

    w.onload = function() { 
     w.print(); 
    }; 

    return false; 
}); 
+0

不能在FF上工作。 –