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 11: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 18: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