Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'appelle un webservice qui me retourne un pdf encode en string64.
Je récupère bien cette sting en appellant ce webservice mais je ne sais pas comment le décoder
et le transformer en pdf.
Merci d'apporter un peu de lumière à mon problème.
Merci d'avance.
Philippe
Dernière modification par pkhayat (24-11-2011 10:01:32)
Hors ligne
pkhayat a écrit:
J'appelle un webservice qui me retourne un pdf encode en string64.
String64 ou Base64 ?
pkhayat a écrit:
Je récupère bien cette sting en appellant ce webservice mais je ne sais pas comment le décoder
et le transformer en pdf.
Si ce n'est trop gros, j'ai fait un objet nv_codec_base64 qui permet d'encoder/décoder de la base64. Il suffirait ensuite d'ouvrir un fichier et d'enregistrer la chaine décodée dans ce fichier (FileOpen / FileWrite / FileClose).
Ce n'est pas très rapide sur des grosses données (dès que ça dépasse quelques ko), mais ça vaut peut-être le coup d'essayer ?
Hors ligne
c'est une string en retour du webservice encodé en base64
Hors ligne
bonjour seki,
peux tu me donner plus de détail sur ton objet nv_codec_base64 ?
Hors ligne
En gros :
nv_codec_base64 b64 blob lbl_data64 string ls_res lbl_data64 = b64.decode("SGVsbG8gV29ybGQgIQ==") ls_res = string(lbl_data64) // ==> Hello World !
Une version un peu plus élaborée, si on ne sait pas ce qui peut se trouver dans la chaîne (gère l'unicode) pour écrire le résultat dans un multilineedit :
nv_codec_base64 b64 blob lbl_data64 byte lb lbl_data64 = b64.decode(as_some_b64_string) //heuristique utf16 if len(lbl_data64) > 1 then getbyte(lbl_data64, 2, lb) if lb = 0 then //probable utf16 mle_decoded.text = string(lbl_data64) else mle_decoded.text = string(lbl_data64, encodingansi!) end if else mle_decoded.text = string(lbl_data64, encodingansi!) end if
Maintenant si la chaîne en question est un fichier PDF, à la place d'affecter mle_decoded.text comme dans l'exemple il faudra faire un FileWrite du lbl_data64.
PS: pour que ça fonctionne dans un projet test, il faut aussi récupérer l'extension pbnicw (disponible sur la même page que nv_codec_base64) que j'utilise pour faire des calculs de bits rapidement. Il est possible de recoder ces calculs en pbscript pur mais ça va être encore plus lent.
Hors ligne
merci à toi,
je vais essayer ce week end et je te tiens au courant.
Merci
Hors ligne
J'ai trouvé comment faire,
j'utilise pour cela une dll base64.dll.
1) Je l'enregistre C:\Windows\System32\REGSVR32.EXE C:\Base64.dll
2) puis après dans mon script je mets le code ci dessous
oleobject uo_64 Int=pb li_rc, li_file String ls_result uo_64 = CREATE OLEObject li_rc=uo_64.ConnectToNewObject("Base64Lib.Base64") IF li_rc<0 THEN MessageBox("Error","Connect to Base64 dll failed") RETURN END IF uo_64.DecodeToFile (ls_return, "C:\ls_return_web_service + ".PDF")
Dernière modification par pkhayat (24-11-2011 17:20:20)
Hors ligne
Hors ligne
pkhayat a écrit:
J'ai trouvé comment faire,
j'utilise pour cela une dll base64.dll.
Par curiosité, c'est une lib qui provient d'où .
Hors ligne
je l'ai trouvé sur ce site
http://nodevice.fr/dll/Base64_dll/item2761.html
Hors ligne