Impression et conversion PDF avec PDF Creator
Bonjour,
Suite à un fil de discussion sur le sujet sur ce forum, je vous propose une solution d'impression et de conversion de documents PDF à l'aide de PDF Creator
Tout d'abord, le lien vers la discussion qui m'a amené à vous proposer d'ajouter ma pierre à l'édifice :
http://www.developpez.net/forums/d86...mante-louvrir/
Cet outil est un freeware, donc pas de souci de licence. Vous pouvez le télécharger ici :
http://sourceforge.net/projects/pdfcreator/
PDF Creator dispose d'une interface COM qui permet de le piloter intégralement, donc depuis WinDev ou WebDev, pas de soucis particulier
Dans votre projet, vous devez commencer par déclarer les variables qui vous permettront d'instancier vos objets :
Code:
1 2 3 4 5
|
MonPDF est un objet OLE dynamique // Objet pilotant PDF Creator
ErreurPDF est un objet OLE dynamique // Objet permettant de gérer les erreurs PDF Creator
MesOptionsPDF est un objet OLE dynamique // Ojet permettant de piloter les options de PDF Creator
DefaultPrinter est une chaîne |
Ensuite vous instanciez les objets nécessaires :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
SI PAS gbPdfCreatorDemarre ALORS
//Allocation de l'objet PDFCreator : si il est déjà démarré, on l'utilise.
MonPDF = ObjetActif("PDFCreator.clsPDFCreator")
SI MonPDF=Null ALORS
MonPDF=allouer un objet OLE "PDFCreator.clsPDFCreator"
ErreurPDF = ObjetActif("PDFCreator.clsPDFCreatorError") // On alloue un objet pour gérer les erreurs.
MesOptionsPDF =ObjetActif("PDFCreator.clsPDFCreatorOptions") // On alloue un objet pour gérer les options.
AutomationEvénement(Eve_PDFCreator_eReady,MonPDF,"eReady") // Les deux procédures de gestion des évenements PDFCreator. -eReady = Pret et dispo pour doc suivant
AutomationEvénement(Eve_PDFCreator_eError,MonPDF,"eError") // -eError = Probleme avec PDFCreator
FIN
FIN
SI PAS MonPDF>>cProgramIsRunning ALORS
SI MonPDF>>cStart("/NoProcessingAtStartup", Vrai) = Faux ALORS
Erreur("Impossible d'initialiser PDFCreator.")
RETOUR
FIN
gbPdfCreatorDemarre = Vrai
SINON
gbPdfCreatorDemarre = Vrai
FIN |
Les différentes fonctions utilisées sont très bien décrites dans l'aide de PDF Creator, et tout fonctionne tres bien.
ATTENTION : dans mon code, j'utilise deux méthodes AUTOMATIOnEvenement, ceci avec un résultat mitigé : la méthode Eve_PDFCreator_eReady est censé renvoyé vrai quand le traitement en cours est terminé, mais je n'ai pas réussi à la faire fonctionner correctement. il faudra creuser ce point. Je m'y pencherai dès que j'aurais un peu de temps.
Ensuite il vous est possible de modifier différents parametres de PDF Creator, il y en a une quantité non négligeable, mais en gros, le principe est le meme :
Code:
1 2 3 4 5 6 7 8
|
MonPDF>>cVisible = Faux //Rend PDF Creator invisible
MonPDF>>cOption("AutosaveFormat") = 0 //Format PDF
MonPDF>>cOption("UseAutosave") = 1 //Sauvegarde automatique
MonPDF>>cOption("UseAutosaveDirectory") = 1 //Utilisation du repertoire sauvegardé.
MonPDF>>cDefaultprinter = "PDFCreator" //Affecte l'imprimante PDF comme imprimante par défaut
MonPDF>>cClearCache |
Pour modifier l'imprimante en cours et la restaurer ensuite par exemple :
Code:
1 2 3
|
DefaultPrinter=iInfoImprimante(Faux)
iConfigure("PDFCreator",Faux) |
et à la fin du traitement, vous la restaurez.
Code:
1 2
|
MonPDF>>cDefaultprinter = DefaultPrinter |
Ensuite exemple de traitement fichier par fichier, mais vous pouvez aussi envoyer toute une liste de fichier en file d'attente...
Code:
1 2 3 4 5 6 7 8 9 10 11
|
// Conversion PDF
sNomCompletFichieraConvertir = sRepertoireNonPDFlocal+"\"+sNomCompletFichier
SI PAS MonPDF>>cIsPrintable(sNomCompletFichieraConvertir) ALORS
//Traitement erreur ....
SINON
MonPDF>>cPrinterStop = Faux
MonPDF>>cOption("AutosaveDirectory") = sRepertoirePDFlocal
MonPDF>>cOption("AutosaveFilename") = fExtraitChemin(sNomCompletFichieraConvertir,fFichier)
MonPDF>>cPrintfile(sNomCompletFichieraConvertir)
FIN |
cPrinterStop permet de suspendre ou non la file d'attente d'impression... si il est à vrai , vous "empilez" vos fichiers dans le spooler jusqu'à ce que vous repassiez à Faux cPrinterStop...
Voila, il est bien entendu possible d'affiner encore, mais cette méthode fonctionne bien et est en production actuellement, sans probleme particulier. Je précise, dans mon cas, il s'agit de convertir différents types de documents en PDF et de les stocker dans un répertoire mais le principe est exactement le même pour imprimer des PDF...
Voilà, en espérant vous avoir donné des pistes. J'ai utilisé cet outil après de nombreuses recherches sur les différents forums et pour rendre à César ce qui est à César , la base de ma procédure est largement inspirée d'un fil de discussion trouvé sur un forum. (je ferais une petite recherche pour faire apparaitre le nom de son auteur originel...)
Je suis bien entendu à votre disposition pour toutes suggestions ou discussions, débats, critiques....
Très cordialement,
Laurent.
1 pièce(s) jointe(s)
Classe Windev de gestion de PDFCreator (Interface COM)
Bonjour,
J'ajoute ci-joint ma petite contribution sous forme de classe Windev (testée et approuvée).
L'appel se fait de cette façon :
Code:
1 2 3 4
|
sFichierChemin est une chaîne = "c:\MonFichier.RTF"
oPDFCreator est un Cla_PDFCreator
oPDFCreator:ImpressionRapide(sFichierChemin,"c:\") |
Petit truc pour empêcher l'affichage de la fenêtre de mise à jour automatique, qui peut bloquer l'exécution de la conversion :
Code:
1 2 3 4 5 6 7 8
|
SI RegistreExiste("HKEY_CURRENT_USER\Software\PDFCreator\Program") ALORS
RegistreEcrit("HKEY_CURRENT_USER\Software\PDFCreator\Program","UpdateInterval",0)
FIN
SI RegistreExiste("HKEY_LOCAL_MACHINE\SOFTWARE\PDFCreator\Program") ALORS
RegistreEcrit("HKEY_LOCAL_MACHINE\SOFTWARE\PDFCreator\Program","UpdateInterval",0)
FIN |
:ccool:
Sauvegarder un document vers le format PDF avec les fonctions OLE d'Open Office
Voir aussi http://www.developpez.net/forums/d14...d-open-office/
Pour convertir un document vers le format PDF avec les fonctions OLE d'Open Office.
Avec la version 2 de PdfCreator il faut tout revoir
Bonjour,
Je ne développe pas avec WinDev mais je n'ai rien contre cette communauté de développeurs, j'étais à la recherche d'informations actualisées sur le composant COM de PdfCreator Version 2 lorsque j'ai trouvé cette discussion sur mon forum préféré.
J'ai donc pensé qu'il pourrait être utile de prévenir que les classes et propriétés présentées dans cette discussion ont disparues dans la version 2.0 de PdfCreator. ;)
Sans doute plus riche, le nouveau modèle n'a plus rien à voir avec celui de la version 1.7.3 (dernière dont je dispose en V1).
De plus, la documentation associée présente un objet PdfCreatorBeta dont on ne retrouve pas les mêmes propriétés lorsqu'on explore l'objet COM livré avec le téléchargement de la V2!
A moins que je n'ai loupé quelque chose...? :?
Si quelqu'un a trouvé une documentation correcte sur le composant COM de la version 2 ce serait sympa de nous proposer un lien.
Accessoirement si quelqu'un peut fournir un lien de téléchargement de la Version 1 (histoire de maintenir les applications actuelles en attendant d'implémenter les objets de la V2). :zoubi:
Je développe essentiellement en VBA et en VB.NET mais ça ne change rien aux caractéristiques du composant COM, enfin, je crois...
Merci pour vos réponses.