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;
/*
*
- TODO Impression de PDF en tache de fond
- /
/**
*
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;
}
}
}
}
30 nov. 2007 à 23:33
Nous avons opté pour une autre solution et je ne fais plus de dev.
Sorry
FB
30 nov. 2007 à 16:39
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
26 oct. 2006 à 18:59
Vraiment Super!
++
24 oct. 2006 à 17:30
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();
}
28 mars 2006 à 16:34
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!!!
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.