PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → 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
Started by Lydie M., Dec., 07 2022 11:27 AM - 15 replies
Posted on December, 07 2022 - 11:27 AM
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.
Registered member
3,297 messages
Popularité : +227 (347 votes)
Posted on December, 07 2022 - 12:38 PM
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
Registered member
4 messages
Posted on December, 07 2022 - 3:48 PM
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".
Registered member
882 messages
Popularité : +53 (63 votes)
Posted on December, 07 2022 - 8:06 PM
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
Registered member
2,544 messages
Popularité : +93 (137 votes)
Posted on December, 07 2022 - 9:31 PM
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
Registered member
882 messages
Popularité : +53 (63 votes)
Posted on December, 08 2022 - 9:22 AM
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
Registered member
3,297 messages
Popularité : +227 (347 votes)
Posted on December, 08 2022 - 11:22 AM
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
Registered member
4 messages
Posted on December, 08 2022 - 4:21 PM
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
Registered member
36 messages
Posted on December, 08 2022 - 4:56 PM
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.
Registered member
4 messages
Posted on December, 09 2022 - 12:37 PM
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
Registered member
882 messages
Popularité : +53 (63 votes)
Posted on December, 09 2022 - 12:57 PM
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
Message modified, December, 09 2022 - 12:58 PM
Registered member
2,544 messages
Popularité : +93 (137 votes)
Posted on December, 09 2022 - 2:29 PM
Lydie pourquoi un HExtraitMémo
Surtout que tu n'utilise pas SQLLitMémo
???
Registered member
4 messages
Posted on December, 09 2022 - 3:59 PM
Popoy, c'est la seule solution qui fonctionne ! et pourtant j'en ai essayé beaucoup...
Registered member
674 messages
Popularité : +40 (42 votes)
Posted on December, 09 2022 - 6:40 PM
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
Posted on December, 20 2022 - 5:58 PM
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 ?!
Posted on December, 20 2022 - 6:12 PM
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 :)