Wednesday, March 15, 2017



Impression Pdf dans état Windev

Une solution pour éditer un état windev puis le fusionner avec mes fichiers Pdf qui font plusieurs pages.

Il faut utiliser une dll externe gsdll32.dll

//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

No comments:

Post a Comment