私の要件を分解しましょう。これが私が今していることです。
1. HTML から PDF ファイルを生成する
このために、次のように Weasyprint を使用しています。
lstFileNames = []
for i, content in enumerate(lstHtmlContent):
repName = 'report'+ str(uuid.uuid4()) + '.pdf'
lstFileNames.append("D:/Python/Workspace/" + repName)
HTML(string=content).write_pdf(target=repName,
stylesheets=[CSS(filename='/css/bootstrap.css')])
パスを含むすべてのファイル名は に保存されlstFileNames
ます。
2. weasyprint で生成された pdf ファイルで zip ファイルを作成します
このために私はzipfileを使用しています
zipPath = 'reportDir' + str(uuid.uuid4()) + '.zip'
myzip = zipfile.ZipFile(zipPath, 'w')
with myzip:
for f in lstFileNames:
myzip.write(f)
3. zip ファイルをクライアントに送信してダウンロードする
resp = HttpResponse(myzip, content_type = "application/x-zip-compressed")
resp['Content-Disposition'] = 'attachment; filename=%s' % 'myzip.zip'
4. Javascript 経由でダウンロードするファイルを開く
var file = new Blob([response], {type: 'application/x-zip-compressed'});
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
問題
1.フロント エンドで zip ファイルが正常に受信されているにもかかわらず、開こうとすると、次のエラーが表示されます。
アーカイブが不明な形式であるか、破損しています
ファイルを間違って送信していますか、それとも私の Javascript コードに問題がありますか?
2.すべてのpdfファイルをバイト配列のリストに保存し、それらのバイト配列でzipファイルを生成してクライアントに送信する方法はありますか? weasyprint で試してみましたが、結果は同じdamaged file
でした。
3.厳密には問題ではありませんが、weasyprint ドキュメントで見つけることができませんでした。ファイルを保存する場所へのパスを強制できますか?
問題 1 は最優先事項であり、残りは二次的なものです。私はそれを正しく行っているかどうか、つまりpdfファイルを生成してクライアントにzipファイルを送信しているかどうかを知りたいです。
前もって感謝します。