Lancer Acrobat Reader et des impressions

Signaler
Messages postés
5
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
23 avril 2008
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonjour à tous,


C'est ma 1ère fois en C# (quelle émotion ^^),  je fais ça dans l'urgence et j'ai un peu de mal...


Voilà le topo.

J'ai un dossier avec des documents PDF.


Je voudrais pouvoir :

1/ Selectionner le dossier en question

2/ Ordonner les fichiers dans l'ordre alphabetique

3/ Lancer Acrobat Reader

4/ Lancer l'impression des PDF à travers Acrobat Reader

5/ Fermer Acrobat Reader


Pour le moment j'ai réussi à faire

1/ avec un FolderBrowser

2/ je stocke les fichiers retournés par 1/ et je les sort()


Mais ça se gate :)


J'arrive à lancer AR et une impression via un process.

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "acrord32.exe";
proc.StartInfo.Arguments = "/h /p "" + loop_fichier + """;
proc.Start();
proc.WaitForExit();


Mon problème est que je comme je boucle sur mon tableau de fichiers, 
je suis obligé de "killer" le 1er process (chose que je n'arrive pas à
faire pour le moment donc je ferme AR à la main), d'en créer un 2ème
qui lance l'impression, le "killer", en créer un 3ème etc...


Comme je le vois il faudrait que je lance Acrobat Reader une seule fois et que je boucle sur mon tableau de fichiers en lui communiquant d'imprimer les fichiers au fur et à mesure.

J'ai vu qu'on pouvait communiquer avec AR via SendMessage mais j'avoue que je ne comprends pas tout. Je ne suis même pas sûr que ça corresponde à mon besoin d'ailleurs.

Pouvez-vous me dire comment réaliser ce que je souhaite?
Quelle piste suivre? SendMessage ou autre?


Merci d'avance pour votre aide

10 réponses

Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

c'est un début de piste, mais le proc.Start(); ne renvoi pas un pid, qui te permet de fermer le processus. Je n'en suis pas sûr mais ca vaut le coup d'esssayer.
Messages postés
5
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
23 avril 2008

Désolé mais je n'ai pas compris ton message.
Tu me demandes d'essayer quoi?
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

alors normalement, chaque processus que tu lances ici "acrord32.exe" à un numéro unique qui s'appelle le Pid. Quand tu lance un processus c'est là que je ne suis pas sur sur la manière de récupérer ce PID avec le proc.Start() peut être.
Mais une fois que tu as ce pid tu va pouvoir fermer le processus par le code. Voilà c'est peut être pas la solution la plus propre, mais c'est la seule que j'ai pour le moment ;)
Messages postés
5
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
23 avril 2008

Ok

J'ai aussi vu qu'on pouvait récuperer "l'ID de la fenêtre Acrobat" ouverte. Donc je suppose qu'on la fermer ensuite.

Mais ça ne résoud pas mon problème principale : comment dire à Acrobat de lancer x impressions :s
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

c'est ultra dur ;)
/h /p C:/1.pdf c:\2.pdf c:\3.pdf c:\956753.pdf
mais je suis pas ultra sur que ca marche ;)
Messages postés
5
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
23 avril 2008

Effectivement ce que tu me propose fonctionne, je faisais ça au début.

Le soucis c'est que la chaîne d'argument est limitée en taille. Je n'arrive pas à trouver la taille maxi mais vu que ça plante quand j'essaye de passer beaucoup de fichier en arguments je sais qu'il y en a une :)
Et je dois pouvoir lancer des dizaines (voir centaines) d'impressions :s
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

mais sinon DIR *.PDF>PRN. ca imprime toute les fichiers dont l'extension est pdf. donc tu peut lancer ca en ligne de commande, et c'est windows qui va se charger d'imprimer. Tu peux mettre le chemin à la place de *.PDF
Messages postés
5
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
23 avril 2008

Le but de cette appli est justement de ne pas passer par Windows pour imprimer tous les fichiers d'un dossier...

En fait, je me suis rendu compte que Windows gère mal l'ordre des fichiers dans un dossier.
Exemple : si je selectionne plusieurs fichiers PDF dans un dossier et que je fais "Fichier / Imprimer" il les envoie dans un ordre aléatoire (même si les fichier se nomment 01.pdf, 02.pdf, 03.pdf etc...) alors que j'ai besoin qu'ils s'impriment dans le bon ordre.
D'où cette petite appli dont le but est d'envoyer à l'impression les fichiers dans le bon ordre...

Personne n'a deja fait de SendMessage vers Acrobat? :s
Messages postés
149
Date d'inscription
mercredi 23 juillet 2003
Statut
Membre
Dernière intervention
30 janvier 2009

oui mais toi tu récupères bien les noms des fichiers et le chemin ?

Tu fais une boucle pour ta liste de fichiers, tu peux imprimer dans l'ordre que tu veux tu fais un >PRN par itération de la boucle et tu peux faire le tri de la liste, faire des condition et tout ...

Les SendMessage j'ai jamais utilisé.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Salut,

Haaaa la bonne vieille blague de l'impression de pdf...
Une piste que j'ai vue passer il y a peu : Printing PDF documents in C#

/*
coq
MVP Visual C#
CoqBlog
*/