PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → [WD16] Impression Pdf dans état Windev
[WD16] Impression Pdf dans état Windev
Débuté par sbourgeois, 10 aoû. 2011 19:11 - 10 réponses
Posté le 10 août 2011 - 19:11
Bonjour,

Je voudrais inclure dans mon état windev un ou plusieurs fichiers pdf.
J'ai pour cela fait un état avec un état intégré.
Dans mon état intégré j'ai mis un champ image ou je charge mes différents pdf.
Pas de problème si mon pdf fait une seule page mais je n'arrive pas à imprimer toutes les pages de mon pdf.

Avez-vous une solution ?
Membre enregistré
101 messages
Posté le 23 août 2011 - 13:11
Bonjour,
Je suis à la recherche d'une solution WD pour l'impression, de fichiers PDf de 1 ou plusieurs pages chacun.
Les fichiers sont existants.
J'ai aussi essayé le PDF en fond d'état ... mais cela ne marche pour qu'un.
Lanceappli ou lanceappliassociée ne permet pas de maitrise l'imprimante.
Iimprimeimage + IfinImprime n'imprime que la première page ....
Pas simple
Merci pour vos cogitations avec, ou sans résultat.

Bonne journée
Posté le 23 août 2011 - 17:52
Bonjour

1. extraire du pdf les pages qui le composent (dans un champ image, en
variant le numéro de page, et avec dsauveimage)
2. Faire une boucle sur l'impression de chaque image

Cordialement

--
Fabrice Harari
Consultant WinDev, WebDev, et WinDev Mobile international
http://fabriceharari.com/index_FR.html


On 23/08/2011 06:30, SR (SFC) wrote:
Bonjour,
Je suis à la recherche d'une solution WD pour l'impression, de fichiers PDf de 1 ou plusieurs pages chacun.
Les fichiers sont existants.
J'ai aussi essayé le PDF en fond d'état ... mais cela ne marche pour qu'un.
Lanceappli ou lanceappliassociée ne permet pas de maitrise l'imprimante.
Iimprimeimage + IfinImprime n'imprime que la première page ....
Pas simple
Merci pour vos cogitations avec, ou sans résultat.

Bonne journée
Membre enregistré
101 messages
Posté le 24 août 2011 - 10:08
Merci Fabrice. Je suis arrivé au même résultat après avoir mis mes neurones en action. Le résultat est impecable. Mieux qu'avec le PDF en fond d'état.

Bonne journée
Membre enregistré
101 messages
Posté le 25 août 2011 - 13:54
Bonjour,
J'ai chanté victoire trop vite !!!
J'ai un phénomène étrange.
Mon PDF est composé à l'origine de deux PDf de sources différentes.
Source A : Editeur PDF ; Source B : généré par WD iDestination(iPDF, NomFichier)
Je fusionne les deux fichiers en un.
Pour imprimer, j'extrais chaque page que j' iImprimeImage(MaPage,0,0,iLargeurPage, iHauteurPage)
pour finir : iFinImprime

Resultats :
Fichier composé de
A + B donne A + page blanche
B + A donne page blanche + page blanche
B+B+B+B+ etc.. donne B+B+B+B+ ETC..
A+A+... donne A+A+A ... etc

Étrange qu'un mixte ne soit pas accepté. Comment y remédier ?

Merci de vos lumières, car je pensais vraiment avoir résolu ce problème.
Posté le 31 août 2011 - 14:20
J'ai trouvé une solution pour éditer mon état windev puis le fusionner avec mes fichiers Pdf qui font plusieurs pages.
J'espère que ça pourra aider quelqu'un moi ça marche bien et ça insère bien mes fichiers pdf entre mes éditions.


Il faut utiliser une dll externe gsdll32.dll

Voici mon code pour vous aider car la documentation de la dll n'est pas détaillée.
Désolé pour l'indentation !!
//Permet d'initialiser la dll
PROCEDURE InitDLL()
//strDLL est une chaîne
//renvoie un entier différent de 0 si DLL chargée
SI gnBl_Echargedll = 0 ALORS
gnBl_Echargedll = ChargeDLL("gsdll32.dll")
FIN

PROCEDURE Imprime()
//imprime mon état avec une sortie PDF
iDestination(iPDF,sNomPdfEtat)
iImprimeEtat(ETA_AGT_AGENTS_NDF_COMPTA)
//ajoute dans un tableau
TableauAjouteLigne(tabJustif,sNomPdfEtat)

//boucle sur mes fichiers Pdf et les ajoute au tableau
HLitPremier(sdReqJustif)
TANTQUE PAS HEnDehors(sdReqJustif)
TableauAjouteLigne(tabJustif,sdReqJustif.fic_justif)
HLitSuivant(sdReqJustif)
FIN

SI TableauOccurrence(tabJustif) > 0 ALORS
SI fFichierExiste("NDF.pdf") ALORS
SI PAS fSupprime("NDF.pdf") ALORS
Info("Génération du fichier impossible.","Vérifiez que le fichier NDF.pdf n'est pas ouvert.","Si c'est le cas, merci de le fermer avant de demander l'édition.")
FIN
FIN
//fusionne tous les pdf
ret est un booléen = FusionnerPDF(tabJustif,"NDF.pdf")

SI PAS ret ALORS
Info("Un problème est survenu durant la génération du fichier pdf")
FIN

SI ret ALORS
//Lance mon PDF générer
LanceAppliAssociée("NDF.pdf")
FIN
FIN


// Résumé : <indiquez ici ce que fait la procédure>
// Syntaxe :
//[ <Résultat> = ] FusionnerPDF (<tabFichiers>, <strFichierSortie>)
//
// Paramètres :
// tabFichiers : <indiquez ici le rôle de tabFichiers>
// strFichierSortie : <indiquez ici le rôle de strFichierSortie>
// Valeur de retour :
// booléen : // Aucune
//
// Exemple :
// Indiquez ici un exemple d'utilisation.
//
//tabFichiers=Tableau de chaine des fichiers à fusionner (la fusion se fera dans l'ordre du tableau)
//strFichierSortie=Fichier à générer
PROCEDURE FusionnerPDF(tabFichiers,strFichierSortie)

iCode est un entier système
iCode1 est un entier système
iTemp est un entier
e_Quit est un entier = -101
iNbParam est un entier
tabParam est un tableau de 0 chaîne
strFichier est une chaîne

bRetour est un booléen = Faux

bFichiersOk est un booléen
sG_GS_TYPE_PDF est une chaîne = "pdfwrite"

SI TableauOccurrence(tabFichiers)> 0 ALORS
bFichiersOk = Vrai
POUR TOUT ELEMENT strFichier DE tabFichiers
SI PAS fFichierExiste(strFichier) ALORS
bFichiersOk = Faux
Info("Le fichier suivant est absent : "+strFichier,"Merci de l'indiquer à votre assistance informatique")
SORTIR
FIN
FIN

SI bFichiersOk ALORS
InitDLL()
SI gnBl_Echargedll <> 0 ALORS
iCode = API("gsdll32.dll","gsapi_new_instance",&iTemp,Null)
SI iCode>= 0 ALORS
TableauAjoute(tabParam,"-dSAFER")
TableauAjoute(tabParam,"-dBATCH")
TableauAjoute(tabParam,"-dNOPAUSE")
TableauAjoute(tabParam,"-debug")
TableauAjoute(tabParam,"-sDEVICE="+sG_GS_TYPE_PDF)
TableauAjoute(tabParam,ChaîneConstruit("-sOutputFile=%1",strFichierSortie))
POUR TOUT ELEMENT strFichier DE tabFichiers
TableauAjoute(tabParam,""+strFichier+"")
FIN
iNbParam = TableauOccurrence(tabParam)
iCode = API("gsdll32.dll","gsapi_init_with_args",iTemp, iNbParam,&tabParam)
iCode1 = API("gsdll32.dll","gsapi_exit",iTemp)
SI iCode = 0 _OU_ iCode = e_Quit ALORS
iCode = iCode1
FIN
API("gsdll32.dll","gsapi_delete_instance",iTemp)
SI iCode = 0 _OU_ iCode = e_Quit ALORS
bRetour = Vrai
FIN
SINON
Erreur()
FIN
FIN
FIN
FIN
RENVOYER bRetour
Membre enregistré
101 messages
Posté le 01 septembre 2011 - 22:32
bonjour,

J'ai résolu mon probleme avec "gsprint.exe" lancé par LanceAppli()
Ce n'est pas aussi élégant, mais cela fonctionne.

Merci pour la participation
Posté le 14 septembre 2011 - 18:39
Bravo et merci pour ton code ça m'aide beaucoup...par contre je bloque car je parviens pas à trouver la bonne version de gsdll32 car celle que j'ai trouvé n'a pas les bonnes fonctions (gsapi_new_instance par exemple)

Peux tu me dire où trouver la même dll que celle que tu utilises ?

Merci.
Posté le 14 septembre 2011 - 19:33
Désolé je ne retrouve plus le site où je l'ai télécharger.
La seule chose que je peux te dire c'est qu'elle fait 14,3Mo.
Par contre si tu as un site ftp ou je peux aller la déposer je peux te donner la mienne je suis sûre qu'elle marche.
Posté le 15 septembre 2011 - 13:32
Merci, j'en ai trouvé une version qui fonctionne dans les sources de "pdfviewernet" ici : http://code.google.com/p/pdfviewernet/downloads/list

je ne connais pas la version de la dll mais elle date du 05/02/2009 et fait 10,7 Mo ...

merci encore !

bourgeois a écrit dans le message de news <1c49c4a1153bb529b1c97135c122446d@news.pcsoft> :
Désolé je ne retrouve plus le site où je l'ai télécharger.
La seule chose que je peux te dire c'est qu'elle fait 14,3Mo.
Par contre si tu as un site ftp ou je peux aller la déposer je peux te donner la mienne je suis sûre qu'elle marche.
Posté le 15 septembre 2011 - 16:15
stuck a exposé le 15/09/2011 :
Merci, j'en ai trouvé une version qui fonctionne dans les sources de
"pdfviewernet" ici : http://code.google.com/p/pdfviewernet/downloads/list

je ne connais pas la version de la dll mais elle date du 05/02/2009 et fait
10,7 Mo ...

merci encore !

bourgeois a écrit dans le message de news
<1c49c4a1153bb529b1c97135c122446d@news.pcsoft> :
Désolé je ne retrouve plus le site où je l'ai télécharger.
La seule chose que je peux te dire c'est qu'elle fait 14,3Mo.
Par contre si tu as un site ftp ou je peux aller la déposer je peux te
donner la mienne je suis sûre qu'elle marche.


il faut version de ghostscript 9.02 pour avoir la dll

--
Cordialement JeAn-PhI