讓我分解我的需求。這就是我現在正在做的事情。使用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.創建與weasyprint
這個生成的PDF文件的zip文件,我使用的壓縮文件
zipPath = 'reportDir' + str(uuid.uuid4()) + '.zip'
myzip = zipfile.ZipFile(zipPath, 'w')
with myzip:
for f in lstFileNames:
myzip.write(f)
3.發送壓縮文件給客戶端下載
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);
問題
雖然在前端被成功接收的zip文件,之後我嘗試打開它,它提供了以下錯誤:
The archive is in either unknown format or damaged
我發送的文件是錯誤的還是我的Javascript代碼有問題?
2.有沒有辦法將所有pdf文件存儲在字節數組列表中,並用這些字節數組生成zip文件並將其發送到客戶端?我用weasyprint試過,但結果是相同的damaged file
。
3.不完全是一個問題,但我一直沒能在weasyprint文檔中找到它。我可以強制執行文件保存位置的路徑嗎?
問題1是極其重要的,其餘的都是次要的。我想知道我是否正確地做,即生成pdf文件並將其zip文件發送到客戶端。
在此先感謝。
你能打開服務器上的zip文件嗎? –
我可以通過轉到保存的目錄手動打開它。其中的PDF文件也正在打開 –
如果您只是重定向到zip文件的url,會發生什麼情況。 'window.location.href ='link/to/file.zip';'? (將zip文件移動到公共可用的tmp文件夾中) –