让我分解一下我的要求。这就是我现在正在做的事情。
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 文件发送给客户端。
提前致谢。