Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > WinDev > Contribuez
Contribuez Vos contributions pour la rubrique Windev : articles, cours, tutoriels, faq, comparatifs, tests, sources, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/01/2010, 14h08   #1
lolob84
Membre régulier
 
Laurent BELLET
Inscription : janvier 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Laurent BELLET

Informations forums :
Inscription : janvier 2010
Messages : 71
Points : 89
Points : 89
Envoyer un message via MSN à lolob84
Par défaut 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.
lolob84 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/07/2010, 15h39   #2
bastiencb
Membre régulier
 
Inscription : août 2005
Messages : 57
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 57
Points : 73
Points : 73
Par défaut 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
Fichiers attachés
Type de fichier : pdf Cla_PDFCreator.PDF (132,0 Ko, 240 affichages)
bastiencb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/10/2010, 15h36   #3
lolob84
Membre régulier
 
Laurent BELLET
Inscription : janvier 2010
Messages : 71
Détails du profil
Informations personnelles :
Nom : Laurent BELLET

Informations forums :
Inscription : janvier 2010
Messages : 71
Points : 89
Points : 89
Envoyer un message via MSN à lolob84
Par défaut Petit complément

Bonjour,

Tout d'abord, merci pour cette classe, qui peut être très utile
Concernant l'exploitation de mon exemple, je tiens à préciser que cela ne fonctionne que si l'on installe pas PDFCreator en mode serveur. Toutes les commandes qui permettent de rediriger vers un répertoire différent ne sont plus utilisable dans ce cas.

Voilà

Cordialement,
Laurent
lolob84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 14h17   #4
Momoborder
Invité de passage
 
Inscription : juin 2004
Messages : 6
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 6
Points : 2
Points : 2
Par défaut Merci à toi

Merci à toi pour cette classe qui m'a tout simplement facilité la vie.
Développement vôtre,

Adrien.
Momoborder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 11h47   #5
Bowen
Membre émérite
 
Homme
Inscription : mars 2002
Messages : 846
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France

Informations forums :
Inscription : mars 2002
Messages : 846
Points : 907
Points : 907
Heu...
C'est possible d'envoyer un état vers cette classe ?
Ou même simplement de paramétrer l'imprimante avec cette classe, puis lancer l'impression sur l'imprimante ?

J'avoue que j'aimerai bien un petit guidage, car je suis un peu paumé...
Bowen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 12h01   #6
bechy
Invité de passage
 
jf B.E
Inscription : octobre 2010
Messages : 1
Détails du profil
Informations personnelles :
Nom : jf B.E

Informations forums :
Inscription : octobre 2010
Messages : 1
Points : 1
Points : 1
Bonjour à toutes et tous,

ce code marche dans les versions de windev supérieure à 7.0.
MAIS, j'ai encore une application en Windev 5.5 et là cela ne marche pas.
En windev5.5 il n'existe pas d'impression en PDf natif , donc on est obliger de passer par une imprimante virtuelle tiers.
En modifiant la base de registre on arrive à piloter pdfcreator (et a faire la même chose), mais passer par l'objet com c'est quand même mieux.

Si qqu à une idée sur le sujet.

merci.
bechy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2013, 11h44   #7
altoh77
Invité de passage
 
Homme
Développeur informatique
Inscription : mars 2013
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2013
Messages : 1
Points : 1
Points : 1
Par défaut Classe PDF

Bonjour,

Merci pour la classe.

n'étant pas encore expérimenté dans ce domaine, cela m'a bien aidé à comprendre le fonctionnement.
altoh77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h53.


 
 
 
 
Partenaires

Hébergement Web