Bas   Précédent   Suivant  Le sujet est verrouillé



Explication : Imprimer par prog des PDF avec acrobat reader
Animateur WDF
Inscrit:
22/11/2004 11:23
Post(s): 255
Je poste ce topic non pas pour poser une question mais pour exposer la solution que j'ai trouvé pour imprimer des documents PDF par programmation via le logiciel acrobat reader.
Cela faisait plusieurs semaines que je planchais sur le problème et j'ai enfin trouvé cette solution qui me libère d'une tension certaine :)

Je souhaitais donc trouver une solution gratuite pour imprimer de manière "propre" des PDF. J'avais trouvé un petit utilitaire "GSPrint" qui permettait de faire cela mais l'installation n'était pas des plus simple et je rencontrais un soucis de temps en temps : si le document PDF n'avait pas une marge assez importante sur la gauche, à l'impression, celle-ci était tout simplement "mangée" par GSPrint qui nous sortait donc des documents incomplet. (il ne recadrait pas le PDF avant impression)

Je me suis donc penché vers des objet COM. Problème, et de taille, les objets COM ne sont utilisable qui si Adobe Acrobat (ne pas confondre avec acrobat reader) était installé (299$ quand même). Enfin,après téléchargement de la version trial, j'avais réussi à faire un petit code pour lancer une impression via ces objets.

oPDF est un objet Automation dynamique

oPDF = allouer un objet Automation("AcroExch.PDDoc")

oPDF>>open("C:\test.pdf")
//---La commande pour imprimer se manipule via un autre objet automation.
//---Désolé, je ne retrouve plus la portion de code pour imprimer
oPDF>>close()

libérer oPDF


Mais il y avait une chose à laquelle je n'avais pas pensé : Je devais pouvoir imprimer sur n'importe quelle imprimante déclarée sur mon ordinateur. Or les objets COM permettent uniquement d'imprimer sur la dernière imprimante utilisée par l'utilisateur sous acrobat. J'étais donc bloqué (299$ + ce problème de sélection d'imprimante)

Je me retourne a nouveau vers acrobat reader et je me penche vers une autres méthode : les liaisons DDE
Une liaison DDE permet de faire communiquer 2 applications entre elles. Après plusieurs jours de recherche, je suis tombé sur le document ultime qui me donnait toutes les commandes DDE disponibles. L'une d'entres elles me permet d'imprimer sur l'imprimante de mon choix. Voici donc une procédure qui prend en entrée le chemin vers l'exécutable de Acrobat Reader (qui peut aussi être récupérable dans la base de registre), l'imprimante de sortie souhaitée et le nom du fichier à imprimer.
Ce code a été testé sur Acrobat Reader 7 et fonctionne parfaitement

PROCEDURE ImprimePDF(AcrobatPath,Printer,PDF)

id est un entier

//---On boucle pour attendre le lancement de acrobat reader
TANTQUE ExeLancé(AcrobatPath) = Faux
	DDELance(AcrobatPath,DDEIconise,Faux)	
FIN

//---Connexion à la liaison DDE de acrobat
id = DDEConnecte("acroview","control")

//---Dans le cas où Acrobat n'avait pas terminé de charger ses plug-ins
TANTQUE id = 0
	id = DDEConnecte("acroview","control")
FIN

//---On sélectionne temporairement l'imprimante de notre choix
iConfigure(Printer,Vrai)

//---On ouvre le document à imprimer
DDEExécute(id,"[DocOpen("+Caract(34)+PDF+Caract(34)+")]")
//---On lance une impression silencieuse sur l'imprimant de notre choix
DDEExécute(id,"[FilePrintTo("+Caract(34)+PDF+Caract(34)+","+Caract(34)+iInfoImprimante(Vrai,iNomImprimante)+Caract(34)+","+Caract(34)+iInfoImprimante(Vrai,iNomDriver)+Caract(34)+","+Caract(34)+iInfoImprimante(Vrai,iNomPort)+Caract(34)+")]")
//---On ferme le document PDF
DDEExécute(id,"[DocClose("+Caract(34)+PDF+Caract(34)+")]")
//---On quitte acrobat reader
DDEExécute(id,"[AppExit()]")



Avantages :
- Gratuit (utilisation de Acrobat Reader)
- Impression très propre
- recadrage automatique des PDF

Inconvéniant :
- Lance la fenêtre de Acrobat Reader (donc pas totalement transparent) mais il doit y avoir un moyen via les API windows de "cacher" acrobat reader (Il y a une commande DDE pour masquer acrobat mais à l'ouverture d'un document, celui-ci réapparait). SI quelqu'un a une idée, je suis preneur.

Voilà, c'est peu de chose mais je me suis prit tellement la tête dessus que je poste ici si quelqu'un en a besoin un jour ;)

Note pour les admins : Ne sachant pas où aller pour proposer un article, je le postes ici. Si vous souhaitez le mettre en tant qu'article sur le site, j'ai le fichier PDF avec toutes les références des objet COM et commandes DDE disponibles, vous n'avez qu'à me contacter en privé.

Voilà, j'ai terminé mon roman, merci à tous :)

Contribution le : 02/03/2005 11:13
Créer un fichier PDF de la contribution Imprimer


Re: Explication : Imprimer par prog des PDF avec acrobat reader
Animateur WDF
Inscrit:
26/06/2002 16:24
De wdforge.org
Post(s): 2822
Fort bien.
Une utilisation du SDK était en cours sur le sujet pour PDFCreator mais Son auteur sera abscent cette semaine.

Cloture de fil de discussion (pour mise en attente avant déplacement comme ressource) et contact en privé à suivre.

Contribution le : 02/03/2005 11:32
_________________
R&B
Contact, CV.
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant

 Le sujet est verrouillé


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2