PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV (earlier versions) → API Ghostscript
API Ghostscript
Started by Créator1969, Nov., 24 2017 10:27 PM - 7 replies
Registered member
7 messages
Posted on November, 24 2017 - 10:27 PM
Bonjour à toutes et tous,
Je suis toujours sur WD17, et je me casse les dents sur l'API de Ghostscript v9.22
J'essaye de splitter des fichiers PDF pour en réorganiser les pages mais je sèche.

iCode, iCode1, DLLInst, GsInst sont des entier système
iTemp, iNbParam sont des entier
bRetour est un booléen
Params est un tableau de chaînes
DllPath est une chaîne="c:\Program Files (x86)\gs\gs9.22\bin\gsdll32.dll"
DLLInst = ChargeDLL(DllPath)
SI DLLInst = 0 ALORS
Erreur(ErreurInfo())
FIN

// Nouvelle instance Ghostscript
GsInst=API("gsdll32.dll","gsapi_new_instance", &iTemp, Null)
SI GsInst >= 0 ALORS

// Construction des paramètres
TableauSupprimeTout(Params)
TableauAjoute(Params,"-dBATCH")
TableauAjoute(Params,"-dNOPAUSE")
TableauAjoute(Params,"-sDEVICE=pdfwrite")
TableauAjoute(Params,"-o 3d.pdf")
TableauAjoute(Params,"1a2.pdf")

// des fichiers pdf
iNbParam=TableauOccurrence(Params)
iCode=API("gsdll32.dll", "gsapi_init_with_args", iTemp, iNbParam, &Params)
iCode1=API("gsdll32.dll", "gsapi_exit",iTemp)
FIN

// Déchargement de DLL
API("gsdll32.dll","gsapi_delete_instance",iTemp)
SI iCode = 0 ALORS bRetour=Vrai


iCode me retourne -100

Si quelqu'un à une idée ..

Bonne soirée.
Registered member
946 messages
Popularité : +102 (110 votes)
Posted on November, 27 2017 - 12:10 PM
Bonjour,
Voici la traduction de l'exemple fourni sur le site de Ghostscript
//constant
// GS_ARG_ENCODING_LOCAL = 0
// GS_ARG_ENCODING_UTF8 = 1
// GS_ARG_ENCODING_UTF16LE = 2
//end

hndDLL, code, minst sont des entiers système
DllName est une chaîne
Params est un tableau de chaînes

DllName = "C:\Program Files\gs\gs9.22\bin\gsdll64.dll"

IF NOT fFichierExiste(DllName) THEN
Erreur(ChaîneConstruit("Fichier %1 inconnu ! ", DllName))
RETOUR
END

hndDLL = ChargeDLL(DllName)
IF hndDLL = 0 THEN
Erreur(ChaîneConstruit("Chargement de la dll impossible !", DllName),ErreurInfo())
RETOUR
END

code = API(DllName, "gsapi_new_instance", &minst, Null)
IF code < 0 THEN
DéchargeDLL(hndDLL)
RETOUR
ELSE
Trace("gsapi_new_instance : " + minst)
END

code = API(DllName, "gsapi_set_arg_encoding", minst, 1) //GS_ARG_ENCODING_UTF8 = 1
IF code <> 0 THEN
Erreur("Code = " + code)
DéchargeDLL(hndDLL)
RETOUR
ELSE
Trace("gsapi_set_arg_encoding : ok")
END

TableauSupprimeTout(Params)
TableauAjoute(Params, ChaîneVersUTF8("ps2pdf"))
TableauAjoute(Params, ChaîneVersUTF8("-dNOPAUSE"))
TableauAjoute(Params, ChaîneVersUTF8("-dBATCH"))
TableauAjoute(Params, ChaîneVersUTF8("-dSAFER"))
TableauAjoute(Params, ChaîneVersUTF8("-sDEVICE=pdfwrite"))
TableauAjoute(Params, ChaîneVersUTF8("-sOutputFile=out.pdf")) // nom du fichier converti
TableauAjoute(Params, ChaîneVersUTF8("-c"))
TableauAjoute(Params, ChaîneVersUTF8(".setpdfwrite"))
TableauAjoute(Params, ChaîneVersUTF8("-f"))
TableauAjoute(Params, ChaîneVersUTF8("C:\Program Files\gs\gs9.22\examples\alphabet.ps")) // nom d'un fichier ps valide

code = API(DllName, "gsapi_init_with_args", minst, Dimension(Params), &Params)
IF code <> 0 THEN
Erreur("gsapi_init_with_args : " + code)
ELSE
Trace ("gsapi_init_with_args : ok")
code = API(DllName, "gsapi_exit", minst)
IF code <> 0 THEN
Erreur("gsapi_exit : "+ code)
ELSE
Trace(("gsapi_exit : ok"))
END
END

DéchargeDLL(hndDLL)


je récupère bien dans le fichier <fRepEncours()>"\out.pdf" le fichier au format postscript converti
Registered member
946 messages
Popularité : +102 (110 votes)
Posted on November, 27 2017 - 1:43 PM
Pour spliter un fichier pdf de x pages dans x fichiers pdf
TableauSupprimeTout(Params)
TableauAjoute(Params, ChaîneVersUTF8("-dBATCH"))
TableauAjoute(Params, ChaîneVersUTF8("-dNOPAUSE"))
TableauAjoute(Params, ChaîneVersUTF8("-sOutputFile=c:\temp\out%4d.pdf"))
TableauAjoute(Params, ChaîneVersUTF8("-sDEVICE=pdfwrite"))
TableauAjoute(Params, ChaîneVersUTF8("C:\temp\annots.pdf")) //input file name

pour extraire de la page 2 à la page 2
TableauSupprimeTout(Params)
TableauAjoute(Params, ChaîneVersUTF8("-dBATCH"))
TableauAjoute(Params, ChaîneVersUTF8("-dNOPAUSE"))
TableauAjoute(Params, ChaîneVersUTF8("-sOutputFile=c:\temp\out.pdf"))
TableauAjoute(Params, ChaîneVersUTF8("-dFirstPage=2"))
TableauAjoute(Params, ChaîneVersUTF8("-dLastPage=3"))
TableauAjoute(Params, ChaîneVersUTF8("-sDEVICE=pdfwrite"))
TableauAjoute(Params, ChaîneVersUTF8("C:\temp\annots.pdf")) //input file name
Registered member
7 messages
Posted on November, 29 2017 - 6:34 PM
Bonjour Philippe,

Merci pour le "ChaîneVersUTF8" mon problème est réglé. (J'avais même pas regardé) ;(
Registered member
7 messages
Posted on December, 03 2017 - 6:33 PM
Maintenant même problème mais pour concaténer (fusionner) les fichiers

TableauAjoute(Params, ChaîneVersUTF8("-dBATCH"))
TableauAjoute(Params, ChaîneVersUTF8("-dNOPAUSE"))
TableauAjoute(Params, ChaîneVersUTF8("-q"))
TableauAjoute(Params, ChaîneVersUTF8("-sDEVICE=pdfwrite"))
TableauAjoute(Params, ChaîneVersUTF8("-sOutputFile=" + cFichierDeSortie))
TableauAjoute(Params, ChaîneVersUTF8(cListe))


Qu'est-ce que je fais de faux ???
Registered member
946 messages
Popularité : +102 (110 votes)
Posted on December, 04 2017 - 11:37 AM
bonjour,
TableauAjoute(Params, ChaîneVersUTF8("-dBATCH"))
TableauAjoute(Params, ChaîneVersUTF8("-dNOPAUSE"))
TableauAjoute(Params, ChaîneVersUTF8("-q"))
TableauAjoute(Params, ChaîneVersUTF8("-sDEVICE=pdfwrite"))
TableauAjoute(Params, ChaîneVersUTF8("-sOutputFile=c:\temp\out.pdf"))
TableauAjoute(Params, ChaîneVersUTF8("c:\temp\f1.pdf")) // 1er fichier
TableauAjoute(Params, ChaîneVersUTF8("c:\temp\f2.pdf")) // 2éme fichier
Posted on March, 18 2024 - 3:56 PM
Bonjour,

Je sais que c'est 6 ans après. Mais un grand merci Philippe. On ne le dit jamais assez sur Internet. Je viens de basculer mon appli en 64bits (je suis en Windev 2024) et pas moyen de fusionner des PDF avec gsdll64.dll jusqu'à ton message.

Nicolas
Registered member
797 messages
Popularité : +40 (42 votes)
Posted on March, 20 2024 - 4:04 PM
Peut-être avec des fonctions Windev? https://ayuda.windev.es/fr-FR/…

Rubén