我在问一个与这个非常相似的问题。我在 Django 的 Ubuntu 服务器上使用 wkhtmltopdf 创建一个 pdf。
from tempfile import *
from subprocess import Popen, PIPE
tempfile = gettempdir()+"/results.pdf"
papersize = 'Tabloid'
orientation = 'Landscape'
command_args = "wkhtmltopdf -O %s -s %s -T 0 -R 0 -B 0 -L 0 http://pdfurl %s" %(orientation, papersize, tempfile)
popen = Popen(command_args, stdout=PIPE, stderr=PIPE)
pdf_contents = popen.stdout().read()
popen.terminate()
popen.wait()
response = HttpResponse(pdf_contents, mimetype='application/pdf')
return response
这给了我在 popen = Popen... 行上的“没有这样的文件或目录”错误。所以我把那条线改成
popen = Popen(["sh", "-c", command_args], stdout=PIPE, stderr=PIPE)
现在我在 pdf_contents =... 行上收到“'file' object is not callable”错误。
我也尝试将 .communicate() 添加到 popen =... 行,但我似乎无法以这种方式找到 pdf 输出。我应该补充一点,在命令行中输入 command_args 行会创建一个 pdf 就好了。谁能指出我正确的方向?