私の要件を打破しましょう。ここに私が今やっていることがあります。 WeasyprintでPDFファイルを生成し、zipファイルに保存し、そのzipファイルをクライアントに送信し、ダウンロード用に提示してください。
1.
は、以下のようなHTML私はWeasyprintを使用しています。このためからPDFファイルを生成します。
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.私は、ダウンロード
のためにクライアントにzipファイルzipPath = 'reportDir' + str(uuid.uuid4()) + '.zip'
myzip = zipfile.ZipFile(zipPath, 'w')
with myzip:
for f in lstFileNames:
myzip.write(f)
3.送信zipファイルを使用しています。このため
weasyprintによって生成されたPDFファイルと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ファイルが正常にフロントエンドで受信されている間、私はそれを開こうとした後、それが次のエラーを与える:
The archive is in either unknown format or damaged
ファイルを間違って送信していますか、またはJavascriptコードで問題が発生していますか?
2.バイト配列のリストにすべてのpdfファイルを格納し、それらのバイト配列を持つzipファイルを生成してクライアントに送信する方法はありますか?私はweasyprintでそれを試みたが、結果は同じdamaged file
だった。
3.問題はありませんが、私はweasyprint docsで見つけることができませんでした。ファイルを保存する場所へのパスを強制できますか?
問題#1は極度の優先事項であり、残りは副次的なものです。私はそれを正しくやっているかどうか、つまりpdfファイルを生成し、zipファイルをクライアントに送信しているかどうかを知りたいと思います。
ありがとうございます。
サーバー上でzipファイルを開くことはできますか? –
私はそれを保存したディレクトリに移動して手動で開くことができます。その中のPDFファイルも開かれています –
zipファイルのURLにリダイレクトするとどうなりますか? 'window.location.href = 'リンク/ to/file.zip';'? (zipファイルを一般公開されているtmpフォルダに移動) –