PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 27 → Ouvrir un fichier PDF à partir d'un fichier JSON issu d'une API
Ouvrir un fichier PDF à partir d'un fichier JSON issu d'une API
Iniciado por Lydie M., 07,dic. 2022 11:27 - 15 respuestas
Publicado el 07,diciembre 2022 - 11:27
Bonjour à tous,

Ce sujet a déjà été abordé dans le forum. J'ai testé toutes les solutions proposées mais ça ne fonctionne pas, j'ai donc besoin d'aide... A force d'avoir chercher partout, je me demande si ce que je veux faire est possible !

A partir d'une api, je vais rechercher des documents pour les afficher au format PDF. Le fichier JSON que je reçois n'est pas encodé.

ResultatAPI est un JSON
ResultatAPI = cRestReponse.Contenu

fSauveBuffer(RepDocPDF+"DocPDF1.pdf",ResultatAPI)


Ca crée bien un PDF mais qui ne peut pas être ouvert car il est endommagé

Voici le début du contenu du fichier JSON reçu ( cRestReponse.Contenu)
%PDF-1.4
%âãÏÓ
1 0 obj
<< 
/Creator (Canon iR-ADV 4525 III  PDF)
/CreationDate (D:20220113115528+01'00')
/Producer (\376\377\000A\000d\000o\000b\000e\000 \000P\000S\000L\000 \0001\000.\000\
3\000e\000 \000f\000o\000r\000 \000C\000a\000n\000o\000n\000\000)

endobj
2 0 obj
<< 
/Pages 3 0 R 
/Type /Catalog 
/OutputIntents 13 0 R 
/Metadata 14 0 R 

endobj
4 0 obj
<< /Type /XObject /Subtype /Image /Width 1240 /Height 1753 /BitsPerComponent 8 
/ColorSpace /DeviceRGB /Filter [ /FlateDecode /DCTDecode ] /Length 35434 >> 
stream
x<1>Ì}<7>\<19>wø÷%,E”Jƒ<21>.......................


Merci beaucoup de votre aide.
Miembro registrado
3.297 mensajes
Popularité : +227 (347 votes)
Publicado el 07,diciembre 2022 - 12:38
Bonjour,
As tu regardé du côté de iImprime
Un truc du style
iDestination(iPDFGénérique,saCheminDest)
iImprime(cRestReponse.Contenu)
iFinImprime()


--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
4 mensajes
Publicado el 07,diciembre 2022 - 15:48
Merci Voroltinquo mais ce n'est pas ce que j'attends. En faisant ce que tu as indiqué, j'ai bien un pdf mais le contenu est le "texte" du JSON et non l'"image".
Miembro registrado
882 mensajes
Popularité : +53 (63 votes)
Publicado el 07,diciembre 2022 - 20:06
Bonjour,

Ce n'est pas un json que tu recoit mais bien le pdf en buffer

fait juste ca

fSauveBuffer(RepDocPDF+"DocPDF1.pdf",cRestReponse.Contenu)


Jordan
Miembro registrado
2.544 mensajes
Popularité : +93 (137 votes)
Publicado el 07,diciembre 2022 - 21:31
Jordan, j'ai l'impression que ça revient à au même code de Lydie
Ça serait pas par hasard une histoire d'unicode ou d'ansi
Miembro registrado
882 mensajes
Popularité : +53 (63 votes)
Publicado el 08,diciembre 2022 - 09:22
Popoy a écrit :
Jordan, j'ai l'impression que ça revient à au même code de Lydie
Ça serait pas par hasard une histoire d'unicode ou d'ansi


Oui effectivement ca revient au même, je pensait aussi a ce problème, mais ca évite de stocker le buffer dans une variable et évite une pseudo conversion

Jordan
Miembro registrado
3.297 mensajes
Popularité : +227 (347 votes)
Publicado el 08,diciembre 2022 - 11:22
Il faut éventuellement penser à retirer les {} encadrant le résultat (délimitateurs du JSON.)
bufPDF est buffer

bufPDF=cRestRéponse.Contenu[[2 A Taille(cRestRéponse.Contenu)-1]]
fSauveBuffer(RepDocPDF+"DocPDF1.pdf"bufPDF)


--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
4 mensajes
Publicado el 08,diciembre 2022 - 16:21
J'avais vu qu'il fallait utiliser l'UNICODE dans l'aide, ce que j'ai mis dans le paramétrage. Je viens donc de tester avec ANSI. Même pb.
Il n'y a pas de délimiteur {} dans ce que je reçois.
Je vais voir si je peux recevoir ce PDF autrement car je crois que je ne vais pas m'en sortir....

Lydie
Miembro registrado
36 mensajes
Publicado el 08,diciembre 2022 - 16:56
Bonjour

il n'y a pas d'information sur l'API qui envoie le pdf.
Si c'est une api développée en windev et qui ne renvoie qu'un pdf peut-être la modifier pour qu'elle renvoie un format binaire (et non json) et ajouter WebserviceEcritTypeMIME(typeMimePDF).
Mais je ne fais que présupposer que l'api est aussi développée en windev.
Miembro registrado
4 mensajes
Publicado el 09,diciembre 2022 - 12:37
Bonjour à tous,

J'ai enfin trouvé la solution donc je vous la partage si ça peut aider ;)

ResultatAPI est un JSON
ResultatAPI = cRestReponse.Contenu

buf est un Buffer = cRestReponse..Contenu

HExtraitMémo(buf,RepDocPDF+sNomDoc+".pdf")


J'obtiens donc le PDF dans son intégralité.

Bonne journée.
Lydie
Miembro registrado
882 mensajes
Popularité : +53 (63 votes)
Publicado el 09,diciembre 2022 - 12:57
lydie martinet a écrit :
Bonjour à tous,

J'ai enfin trouvé la solution donc je vous la partage si ça peut aider

ResultatAPI est un JSON
ResultatAPI = cRestReponse.Contenu

buf est un Buffer = cRestReponse..Contenu

HExtraitMémo(buf,RepDocPDF+sNomDoc+".pdf")


J'obtiens donc le PDF dans son intégralité.

Bonne journée.
Lydie



Donc juste ca
fSauveBuffer(RepDocPDF+"DocPDF1.pdf",cRestReponse.Contenu)


ca doit fonctionner aussi
Mensaje modificado, 09,diciembre 2022 - 12:58
Miembro registrado
2.544 mensajes
Popularité : +93 (137 votes)
Publicado el 09,diciembre 2022 - 14:29
Lydie pourquoi un HExtraitMémo
Surtout que tu n'utilise pas SQLLitMémo
???
Miembro registrado
4 mensajes
Publicado el 09,diciembre 2022 - 15:59
Popoy, c'est la seule solution qui fonctionne ! et pourtant j'en ai essayé beaucoup...
Miembro registrado
674 mensajes
Popularité : +40 (42 votes)
Publicado el 09,diciembre 2022 - 18:40
Bonjour, ¿le contenu où le PDF est censé être téléchargé n'est-il pas en JSON encodé en Base64 ou similaire? Si le contenu est du texte brut, il peut contenir des caractères comme { } : etc. qui rendraient la structure JSON incorrecte ?

Rubén
Publicado el 20,diciembre 2022 - 17:58
Bonjour Lydie,

Je fais face au même type de pb que vous. Je consomme un webservice REST d'un prestataire et je n'ai pas le contrôle sur ce que j'obtiens dans le contenu. la seule chose que j'ai constaté, c'est que si je debug le contenu du retour, il affiche bien l'image du PDF et le format du contenu est de type application/octet-stream. j'ai essayé le fsauvebuffer également sans succès.

à quoi sert de mettre le contenu dans un JSON si vous ne l'utilisez pas après ?
Donc c'est vraiment l'affectation du contenu au buffer puis le hextraitmemo qui fonctionnerait ?!
Publicado el 20,diciembre 2022 - 18:12
Re,
J'avais le même type de pb que Lydie et finalement le fsauvebuffer a fonctionné !
Mon pb est que j'avais voulu sauvegarder les données dans un sous répertoire avec la date du jour, mais du coup le répertoire de destination n'existait pas ! et c'est ça qui bloquait.
Avec un frepcrée tout est rentré dans l'ordre :)