Impression d'un document pdf en tache de fond

Soyez le premier à donner votre avis sur cette source.

Snippet vu 32 121 fois - Téléchargée 32 fois

Contenu du snippet

Bonjour,
Ce code va permetre d'imprimer un document PDF.
Mon seul regrès c'est que se soit en pseudo tache de fond, car l'icone d'Acrobt Reader se met dans la bare des tâche de windows.
Sur ce amusez-vous bien!

Source / Exemple :


import javax.print.PrintService;
import javax.print.PrintServiceLookup;

/*

  • Created on 23 févr. 2005
*
  • TODO Impression de PDF en tache de fond
  • /
/**
  • @author Waldo2188
*
  • /
public class ImpressionPDF { public static void main(String[] args) { final String PATH_ADOBE_READER = "C:\\Program Files\\Adobe\\Acrobat 5.0\\Reader\\AcroRd32.exe"; final String ADOBE_READER_PRINT_COMMAND = "/t"; final String SLASH = "/"; final String QUOTE = "\""; final String SPACE = " "; final String pFile ="C:\\MonDossier\\MonPDF.pdf" ; PrintService service = PrintServiceLookup.lookupDefaultPrintService();//localisation de l'imprimante par défaut // Commande à exécuter String lCommand = QUOTE + PATH_ADOBE_READER + QUOTE + SPACE + ADOBE_READER_PRINT_COMMAND + SPACE + QUOTE + pFile + QUOTE + SPACE + QUOTE + service.getName() + QUOTE;//service.getName() c'est l'imprimante par defaut System.out.println("[printPDF] Command to be executed : " + lCommand); Process lAdobeProcess = null; try { // Execute Adobe Reader command "/t" (imprime et ferme) lAdobeProcess = Runtime.getRuntime().exec(lCommand); //dors pendant 2.4seconde avant de fermer la fenêtre de Acrobat Reader Thread.sleep(24000); lAdobeProcess.destroy(); } catch (Exception e) { System.err.println("[printPDF] Error printing PDF : " + pFile); e.printStackTrace(); } finally { System.out.println("lAdobeProcess.toString()"); if (lAdobeProcess != null) { //destruction de l'instance de Acrobat Reader lAdobeProcess.destroy(); lAdobeProcess = null; } } } }

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
30 novembre 2007

Suis navré et désolé mais je ne suis plus du tout dans le coup et ne pourrais t'offrir aucune aide.
Nous avons opté pour une autre solution et je ne fais plus de dev.

Sorry
FB
Messages postés
1
Date d'inscription
mardi 10 avril 2007
Statut
Membre
Dernière intervention
30 novembre 2007

Frabu,

Mon besoin :

1 - lire un très grand nombres de fichiers pdf (assez volumineux) et d'origines diverses en entrée
2 - les passer dans PDFCreator à travers Adobe pour les mettre en conformité, car certains ont des polices
particulières...
3 - j'ai besoin que le traitement soient le plus rapide possible.


Ce que j'ai déjà fait :

J'ai repris le code de Waldo, que je remercie au passage ! mais, j'ai encore d'autres soucis :

Problèmes :

1 - C'est bien, car Adobe est en tâche de fond (j'aurais préféré pas le voir du tout), mais le traitement reste long
2 - çà plante souvent, de manière aléatoire
3 - je ne peux pas me permettre de mettre une tempo style Thread.sleep(), car les fichiers sont de tailles variables...et ça risque d'être inssufisant pour certains.

Ta solution :

1 - D'abord, merci de me dire, lequel ils faut télécharger exactement de .exe ?
2 - J'en ai essayé deux, à exécuter à la place d'Adobe dans le Runtime.getRuntime().exec(lCommand);
3 - Je ne vois pas ou on me demande de choisir le nombre de copie...etc...
4 - et surtout, çà ouvre Adobe (et pas en tâche de fond) et çà plante, car il n'arrive pas à ouvrir mes fichiers...

Pourrais-tu m'apporter une aide ...c'est urgent ! Merci mille fois....

merci de répondre si possible à : slimane-docuged@orange.fr

Slim
Messages postés
142
Date d'inscription
jeudi 12 février 2004
Statut
Membre
Dernière intervention
20 mai 2008

frabu -> Nickel, je pensse que ton commantaire va aider pas mal de monde.
Vraiment Super!
++
Messages postés
2
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
30 novembre 2007

Un petit tool qui fait une meilleure glue entre ce code (que j'ai finalement repris dans notre projet après vaines recherches) et AcrobatReader:
http://www.esnips.com/web/PDFTools
C'est un utilitaire ecrit en C (mais dispo en .exe) que j'appelle à la place de AcrobatReader, il se chargera de faire l'appel à ce dernier. Pas de doc mais juste lancer "pdfp.exe" et les options s'affichent.
Il permet de choisir le printer, l'orientation, le nbr de copie.
AcrobatReader s'ouvre et se ferme automatiquement: plus de wait ni de destroy. Mon code adapté devient alors:

final String PATH_PRINT_EXE = "C:\\temp\\pdfp.exe";
final String PRINT_COMMAND = "-p";
final String SLASH = "/";
final String QUOTE = """;
final String SPACE = " ";
final String fileToPrint ="E:\\test.pdf" ;
PrintService printer = PrintServiceLookup.lookupDefaultPrintService();
//localisation de l'imprimante par défaut

String lCommand =
QUOTE + PATH_PRINT_EXE + QUOTE + SPACE +
PRINT_COMMAND + SPACE +
QUOTE + printer.getName() + QUOTE + SPACE +
QUOTE + fileToPrint + QUOTE;

System.out.println("[printPDF] Command to be executed : " + lCommand);

try{
Runtime.getRuntime().exec(lCommand);//2 print en rafale!
Runtime.getRuntime().exec(lCommand);//pour savourer
}
catch (Exception e)
{
System.err.println("[printPDF] Error printing PDF : "+ fileToPrint);
e.printStackTrace();
}
Messages postés
1
Date d'inscription
mardi 28 mars 2006
Statut
Membre
Dernière intervention
28 mars 2006

j'ai beaucoup aimé ton code et je suis en train de le mettre en thread pour permettre de faire l'impression sur plusieurs imprimantes en meme temps!
mais est ce qu'on peut modifier le nombre de copie et choisir les pages par exemple(dans les arguments de acrobat) et modifier le temps de destroy en fonction de la taille!
repond moi sur essiarab.yasser@gmail.com je suis impatient!!!
Afficher les 19 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.