web-dev-qa-db-fra.com

Comment envoyer un fichier pdf directement à l'imprimante en utilisant JavaScript?

Comment envoyer un fichier PDF directement à l'imprimante en utilisant JavaScript?

J'ai trouvé deux réponses dans un forum:

<embed src="vehinvc.pdf" id = "Pdf1" name="Pdf1" hidden>
<a onClick="document.getElementById('Pdf1').printWithDialog()" style="cursor:hand;">Print file</a>

et

<OBJECT id = "Pdf2" name="Pdf2" CLASSID="clsid:CA8A9780-280D-11CF-A24D-444553540000" WIDTH="364" HEIGHT="290">
     <PARAM NAME='SRC' VALUE="file.pdf">
</OBJECT>
<a onClick="document.Pdf2.printWithDialog()">Print file</a> 

Mais mon problème est qu'il fonctionne uniquement sur IE et ne fonctionne pas dans Firefox ou Chrome.

Existe-t-il une solution à ça?

33
Jignesh Manek

Je pense que cette bibliothèque de JavaScript pourrait vous aider:

Il s'appelle Print.js

Inclure d'abord

<script src="print.js"></script>
<link rel="stylesheet" type="text/css" href="print.css">

Son utilisation de base est d'appeler printJS() et de simplement passer un PDF URL du document: printJS('docs/PrintJS.pdf')

Ce que j'ai fait était quelque chose comme ça, cela affichera également "Loading ...." si PDF est trop grand.

<button type="button" onclick="printJS({printable:'docs/xx_large_printjs.pdf', type:'pdf', showModal:true})">
    Print PDF with Message
</button>

Gardez cependant à l'esprit que:

Firefox ne permet actuellement pas d'imprimer PDF utilisant des iframes. Il y a un bug ouvert sur le site Web de Mozilla à ce sujet. Lorsque vous utilisez Firefox, Print.js ouvrira le fichier PDF dans un nouvel onglet.

11
zsubzwary

Vous devez suivre deux étapes.

Tout d'abord, vous devez mettre le PDF dans un iframe.

  <iframe id="pdf" name="pdf" src="document.pdf"></iframe>

Pour imprimer l'iframe, vous pouvez consulter les réponses ici:

Javascript Print iframe contents only

Si vous souhaitez imprimer automatiquement l'iframe après le PDF chargement, vous pouvez ajouter un gestionnaire de chargement au <iframe>:

  <iframe onload="isLoaded()" id="pdf" name="pdf" src="document.pdf"></iframe>

le chargeur peut ressembler à ceci:

function isLoaded()
{
  var pdfFrame = window.frames["pdf"];
  pdfFrame.focus();
  pdfFrame.print();
}

Cela affichera la boîte de dialogue d'impression du navigateur, puis imprimera uniquement le document PDF lui-même. (J'utilise personnellement le gestionnaire de chargement pour activer un bouton "Imprimer" afin que l'utilisateur puisse décider d'imprimer le document, ou pas).

J'utilise ce code à peu près textuellement dans Safari et Chrome, mais je ne l'ai pas encore essayé sur IE ou Firefox.

8
Doctor Eval

Essayez ceci: Ayez un bouton/lien qui ouvre une page Web (dans une nouvelle fenêtre) avec juste le fichier pdf intégré, et imprimez la page Web.

En tête de la page principale:

<script type="text/javascript">
function printpdf() 
{
myWindow=window.open("pdfwebpage.html");
myWindow.close;  //optional, to close the new window as soon as it opens
//this ensures user doesn't have to close the pop-up manually
}
</script>

Et dans le corps de la page principale:

<a href="printpdf()">Click to Print the PDF</a>

À l'intérieur de pdfwebpage.html:

<html>
<head>    
</head>

<body onload="window.print()">
<embed src="pdfhere.pdf"/>

</body>
</html>
5
Dhruv Murarka

une fonction pour héberger le déclencheur d'impression ...

function printTrigger(elementId) {
    var getMyFrame = document.getElementById(elementId);
    getMyFrame.focus();
    getMyFrame.contentWindow.print();
}

un bouton pour donner accès à l'utilisateur ...

(an onClick on an a or button or input or whatever you wish)

<input type="button" value="Print" onclick="printTrigger('iFramePdf');" />
an iframe pointing to your PDF...

<iframe id="iFramePdf" src="myPdfUrl.pdf" style="dispaly:none;"></iframe>

Plus: http://www.fpdf.org/en/script/script36.php

0
Joe Solutions