J'ai un PDF en tant que chaîne base64 et je dois l'écrire dans un fichier en utilisant Python. J'ai essayé ceci:
import base64
base64String = "data:application/pdf;base64,JVBERi0xLjQKJeHp69MKMSAwIG9iago8PC9Qcm9kdWNlciAoU2tpYS9..."
with open('temp.pdf', 'wb') as theFile:
theFile.write(base64.b64decode(base64String))
Mais il n'a pas créé de fichier PDF PDF valide. Que me manque-t-il?
D'après ma compréhension, base64decode ne prend qu'une chaîne base64 et semble que vous avez des en-têtes sur votre chaîne qui ne sont pas codés.
Je supprimerais "data: application/pdf; base64,"
consultez le doc ici: https://docs.python.org/2/library/base64.html
Quand je l'ai utilisé dans le passé, je n'ai utilisé que la chaîne codée.
L'écrit-il en utilisant le codecs.decode
fonction de travail? également comme Mark l'a dit, vous pouvez essayer de supprimer le data:application/pdf;base64,
partie de la chaîne car cette section de la chaîne ne doit pas être décodée .:
import codecs
base64String = "JVBERi0xLjQKJeHp69MKMSAwIG9iago8PC9Qcm9kdWNlciAoU2tpYS9..."
with open("test.pdf", "wb") as f:
f.write(codecs.decode(base64string, "base64"))
Ce ne sont pas seulement des données encodées en base64, mais encodées en uri de données:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
Il existe un autre article sur le débordement de pile demandant comment analyser de telles chaînes en Python:
Comment analyser data-uri en python?
L'essentiel est de supprimer l'en-tête (jusqu'à la première virgule incluse):
theFile.write(base64.b64decode(base64String.split(",")[1:2]))
REMARQUE: j'utilise [1: 2] au lieu de [1] car il ne lèvera pas d'exception s'il n'y a qu'un seul élément dans la liste car rien ne suit la virgule (données vides).