PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV (versões anteriores) → API Ghostscript
API Ghostscript
Iniciado por Créator1969, nov., 24 2017 10:27 PM - 7 respostas
Membro registado
7 mensagems
Publicado em novembro, 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.
Membro registado
946 mensagems
Popularité : +102 (110 votes)
Publicado em novembro, 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
Membro registado
946 mensagems
Popularité : +102 (110 votes)
Publicado em novembro, 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
Membro registado
7 mensagems
Publicado em novembro, 29 2017 - 6:34 PM
Bonjour Philippe,

Merci pour le "ChaîneVersUTF8" mon problème est réglé. (J'avais même pas regardé) ;(
Membro registado
7 mensagems
Publicado em dezembro, 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 ???
Membro registado
946 mensagems
Popularité : +102 (110 votes)
Publicado em dezembro, 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
Publicado em março, 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
Membro registado
797 mensagems
Popularité : +40 (42 votes)
Publicado em março, 20 2024 - 4:04 PM
Peut-être avec des fonctions Windev? https://ayuda.windev.es/fr-FR/…

Rubén