2013-01-11 9 views
5

Mam plik PDF powiązany z przyciskiem. Po kliknięciu przycisku chcę wydrukować pdf. To jest jak mój przycisk jest kodowana:Jak mogę wydrukować plik pdf w 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')" /> 

Teraz moja funkcja druku działa tak:

function printPDF(pdfUrl) 
    { 

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

Problemem jest to, że wszystko działa dobrze w IE i Fire Fox, ale nie działa w Chrome. W ie i Firefox otwiera opcję drukarki xps, ale w chrome otwiera po prostu nowe okno drukowania, z podglądem wydruku div, a nie pdf. Ale chcę, aby tutaj otworzyła się opcja xps.

EDYCJA: W wersji chromowanej, gdy próbuję drukować, tylko element html jest dostępny jako podgląd, a nie plik pdf. Używam wersji chrome: 20.0.1132.57

Jak mogę ominąć tę szczególną właściwość? uprzejma pomoc .

Odpowiedz

4

Musiałem zrobić to samo i zastosowałem inne podejście, które dla mnie działało zarówno w przeglądarce Chrome, jak i Firefox.

Moje rozwiązanie zawiera plik pomocniczy print.html, który otrzymał adres URL pliku PDF jako parametr typu GET, a następnie załadował plik pdf wewnątrz elementu iframe. Następnie sprawdzano, czy plik PDF został całkowicie załadowany (wiążące sprawdzenie do zdarzenia onload nie działa), a po zakończeniu uruchomił metodę drukowania.

tutaj:

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

To rozwiązanie nie jest testowany na IE choć. Używamy komputerów Mac w pracy, więc nie było to możliwe.

W tym celu drukowania, używam go przez wywołanie adresu URL tak: http://example.com/print.html?path=docs/myfile.pdf

+0

Dzięki za dzielenie się nim. Sprawdzę to i dam znać, czy to działa dla mnie. –

4

ten pracował dla mnie i nie wymaga pliku hosta HTML. Kluczem było czekać na onload:

o link jak to:

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

użyłem javascript:

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

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

    return false; 
}); 
+0

Nie działa na FF. –

Powiązane problemy