目标
我想制作一个可以将多个 docx 文件(通过单独的并行请求提交)转换为 pdf 的解决方案。
我尝试过的及其行为
经过努力,libreoffice --headless
我发现unoconv
它为 libreoffice 创建了一个侦听器以处理多个请求。虽然与 不同libreoffice --headless
的是,它不会转换通过并行请求提交的 docx 文件,但似乎在内部它们仍然是按顺序处理的。例如:如果文件 A.docx 和 B.docx 分别需要大约 20 和 1.1 秒才能单独转换为 .pdf,那么,如果两者都是通过 2 个专用并行请求提交并且两者的转换都从 00:00:00 开始,两个文件的转换过程在 00:00:20 左右结束。
我想要的行为
但是,我想要的行为是在文件转换后立即返回 pdf,例如:只需在 1.1 秒后返回 B.docx 的 pdf,继续转换 A.docx 并在 20 秒后返回。
这是我正在尝试做的最小的 Django 视图:
def convert(request):
docx_file = request.FILES['docx_file']
file = open(docx_file.name, "w+")
file.write(docx_file.read())
cmd = "unoconv -f pdf %s" % file.name
subprocess.Popen(cmd.split()).communicate(timeout=30)
pdf_file_name = "%s.pdf" % os.path.splitext(file.name)[0]
pdf_file = open(pdf_file_name, 'rb')
return FileResponse(pdf_file, as_attachment=True)