2013-01-11 17 views
5

Tôi có một pdf liên kết với một nút. Khi tôi bấm vào nút tôi muốn để có được pdf in. Đây là cách nút của tôi được mã hóa:Làm cách nào để in pdf trong google chrome?

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

Bây giờ chức năng in của tôi làm việc như thế này:

function printPDF(pdfUrl) 
    { 

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

Vấn đề là, nó làm việc tốt trong IE và fox cháy, nhưng không hoạt động trong chrome. Trong ví dụ và Firefox, nó mở ra tùy chọn máy in xps, nhưng trong chrome, nó chỉ mở ra một cửa sổ in mới, với bản xem trước bản in của div chứ không phải bản pdf. Nhưng tôi muốn các tùy chọn xps được mở ra ở đây.

EDIT: Trong chrome khi tôi cố gắng in, chỉ phần tử html có dạng xem trước chứ không phải bản pdf. Tôi đang sử dụng phiên bản chrome: 20.0.1132.57

Làm cách nào để tôi có được sự khác biệt này? giúp đỡ một cách tử tế .

Trả lời

4

Tôi phải làm điều tương tự và tôi đã sử dụng một cách tiếp cận khác, một cách mà tôi đã làm việc trong cả Chrome và Firefox.

Giải pháp của tôi liên quan đến tệp trợ giúp print.html, đã nhận url của tệp PDF dưới dạng tham số loại GET, sau đó tải tệp pdf vào iframe. Sau đó, nó tiếp tục kiểm tra xem pdf đã tải hoàn toàn chưa (ràng buộc kiểm tra với sự kiện onload không hoạt động) và khi hoàn thành nó đã kích hoạt phương thức in.

đây:

<!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> 

Giải pháp này không được thử nghiệm trên IE mặc dù. Chúng tôi sử dụng máy Mac tại nơi làm việc nên nó không phải là một lựa chọn.

Để làm được việc in ấn, tôi sử dụng nó bằng cách gọi một URL như sau: http://example.com/print.html?path=docs/myfile.pdf

+0

Cám ơn chia sẻ nó. Sẽ kiểm tra nó và cho bạn biết, cho dù nó hoạt động cho tôi. –

4

này làm việc cho tôi và không đòi hỏi phải có file host HTML. Mấu chốt là phải chờ onload:

Đối với một liên kết như thế này:

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

tôi đã sử dụng javascript:

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

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

    return false; 
}); 
+0

Không hoạt động trên FF. –

Các vấn đề liên quan