PDFがbase64文字列としてあり、それをPythonを使用してファイルに書き込む必要があります。これを試しました:
import base64
base64String = "data:application/pdf;base64,JVBERi0xLjQKJeHp69MKMSAwIG9iago8PC9Qcm9kdWNlciAoU2tpYS9..."
with open('temp.pdf', 'wb') as theFile:
theFile.write(base64.b64decode(base64String))
しかし、有効なPDFファイルが作成されませんでした。何が不足していますか?
私の理解では、base64decodeはbase64文字列のみを受け取り、文字列にエンコードされていないヘッダーがあるようです。
「data:application/pdf; base64」を削除します
こちらのドキュメントをチェックしてください: https://docs.python.org/2/library/base64.html
過去に使用したことがある場合は、エンコードされた文字列のみを使用しました。
codecs.decode
関数を使用して書き込むことはできますか?また、マークが述べたように、文字列のこのセクションはデコードされないため、文字列のdata:application/pdf;base64,
部分を削除してみることができます。
import codecs
base64String = "JVBERi0xLjQKJeHp69MKMSAwIG9iago8PC9Qcm9kdWNlciAoU2tpYS9..."
with open("test.pdf", "wb") as f:
f.write(codecs.decode(base64string, "base64"))
これは単にbase64エンコードされたデータではなく、data-uriエンコードされたものです。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
Pythonでそのような文字列を解析する方法を尋ねるスタックオーバーフローに関する別の投稿があります。
その要点は、ヘッダー(最初のコンマまでのすべて)を削除することです。
theFile.write(base64.b64decode(base64String.split(",")[1:2]))
注:[1]ではなく[1:2]を使用します。コンマ(空のデータ)の後には何もないため、リストに要素が1つしかない場合は例外がスローされないためです。