web-dev-qa-db-fra.com

Comment imprimer un PDF depuis le navigateur

Dans une application Web, est-il possible de forcer l'impression d'un fichier PDF PDF sur le client? Si le navigateur est configuré pour ouvrir le PDF à l'intérieur de la fenêtre) , Je suppose que l'appel à window.print () fonctionnera, mais certains navigateurs (comme le mien) sont configurés pour ouvrir le PDF en externe).

26
Antoine Aubry

La façon dont Google Docs le fait consiste à intégrer JavaScript dans le PDF qui indique à Acrobat Reader ou à tout autre lecteur compatible de l'imprimer.

Vous auriez besoin d'un PDF toolkit pour le faire avec un PDF aléatoire.

29
Lou Franco
<html>
<script language="javascript">
timerID = setTimeout("exPDF.print();", 1000);
</script>
<body>
<object id="exPDF" type="application/pdf" data="111.pdf" width="100%" height="500"/>
</body>
</html>
5
taeyoung

de manière similaire à la suggestion de taeyoung, vous pouvez utiliser un iframe pour rendre le pdf, puis utiliser contentWindow.print ();

3
Aaron Renoir

vous pouvez définir un en-tête http sur application/pdf, puis forcer l'ouverture d'une nouvelle fenêtre avec javascript et l'imprimer de cette façon. mais qui ferait vraiment ça? je veux dire viens maintenant.

2
theman_on_vista

vous pouvez utiliser la bibliothèque étonnante simple printjs " http://printjs.crabbly.com " il faut PDF et imprimez-le sans afficher la boîte de dialogue d'impression si vous en avez besoin, un moyen simple de le faire ci-dessous:

 <button type="button" onclick="printJS('docs/printjs.pdf')">
    Print PDF
 </button>
1
Ali

Vous ne pouvez pas imprimer un document PDF directement à partir du navigateur en utilisant Javascript. La fonction Javascript window.print () utilise la fonction d'impression du navigateur et ce n'est pas ce dont vous avez besoin. Vous pouvez atteindre votre objectif en commençant l'impression via Java Web Start. Mettez votre document PDF directement dans le jnlp pour pouvoir exécuter un programme Java recevoir le document brut PDF comme argument. Maintenant que vous exécutez dans le système et non plus dans le navigateur, vous pouvez donc vous connecter directement avec le pilote d'impression via Java = API. Cela semble assez simple mais ce n'est vraiment pas parce que l'API d'impression Java n'accepte pas un fichier en entrée mais une structure de données particulière qui implémente l'interface ava.awt.print.Pageable.

Existe un service Web à www.pdfprint.it qui fait tout le travail pour vous. Voici un extrait extrait de la documentation officielle.

<?php

// 1. GET the jnlp file with curl

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.pdfprint.it/printPdf?auth=XXXX");        
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //return the transfer as a string       
$jnlp = curl_exec($ch);
curl_close($ch); 

$pdfDoc ="example.pdf";


//2. put in the jnlp your PDF document base64 encoded

$jnlp = str_replace("####", base64_encode(file_get_contents($pdfDoc)),$jnlp);


//3. echo the jnlp file 

header('Content-type: application/x-Java-jnlp-file');

echo $jnlp;

Il vous suffit d'obtenir le fichier jnlp, de mettre votre document PDF et d'envoyer le jnlp au navigateur. Le programme Java qui exécute l'impression sera téléchargé) directement à partir du service Web. Vous pouvez également définir certaines options d'impression comme des copies, des côtés, etc.

0
Simone

Voulez-vous dire que vous souhaitez forcer l'envoi du fichier à une imprimante? Pensez-vous à la loi des conséquences imprévues - l'appareil de l'utilisateur n'est pas connecté à une imprimante? Pourrait être un BlackBerry, pourrait être un ordinateur portable sur le wi-fi. Que faire si l'utilisateur ne veut pas qu'il aille sur l'imprimante par défaut?

0
DOK