Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Python中的HTML/CSS(包括图像)源生成PDF?_Python_Html_Css_Pdf_Pdf Generation - Fatal编程技术网

如何从Python中的HTML/CSS(包括图像)源生成PDF?

如何从Python中的HTML/CSS(包括图像)源生成PDF?,python,html,css,pdf,pdf-generation,Python,Html,Css,Pdf,Pdf Generation,假设我有一个HTML/CSS页面,其中包含一些图像,我想用Python从该源代码生成一个PDF-可能吗? 安装对我来说有点奇怪,但在其他方面效果很好。您可以使用以下方法执行类似操作: (这是一个生成收据的Django视图,但显然您可以在任何设置中使用Pisa) 不过,您必须调整HTML,使其在Pisa中发挥尽可能好的效果。我最近开始在我的项目中使用wkhtmltopdf,这可能是一个更好的选择。它不仅支持几乎完整的CSS,还支持javascript。首先尝试使用wkhtmltopdf命令来了解它

假设我有一个HTML/CSS页面,其中包含一些图像,我想用Python从该源代码生成一个PDF-可能吗?


安装对我来说有点奇怪,但在其他方面效果很好。

您可以使用以下方法执行类似操作:

(这是一个生成收据的Django视图,但显然您可以在任何设置中使用Pisa)


不过,您必须调整HTML,使其在Pisa中发挥尽可能好的效果。

我最近开始在我的项目中使用wkhtmltopdf,这可能是一个更好的选择。它不仅支持几乎完整的CSS,还支持javascript。首先尝试使用wkhtmltopdf命令来了解它的威力。然后使用它的python扩展

这里是链接

对我来说,安装起来有点棘手。所以我写了这个又快又脏的脚本


仅一次,还是作为网页上“以PDF格式下载此网页”按钮的一部分?什么站台?MacOSX允许你将任何网页保存为PDF格式。只是在发布后才遇到这个问题。工作完美!但愿我能给剧本加2分!谢谢
def receipt(request, id):
    import ho.pisa as pisa
    from django.template.loader import render_to_string
    from datetime import datetime

    r = get_or_404(id, request.affiliate)    
    now = datetime.now()
    contents = render_to_string('home/reservations/receipt.html', {
        'reservation': r,
        'today': now
    })
    filename = now.strftime('%Y-%m-%d') + '.pdf'
    response = HttpResponse(mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=' + filename
    pdf = pisa.CreatePDF(contents, response)
    if pdf.err:
        message(request, 'Unable to generate the receipt.')
        return HttpResponseRedirect(reverse('view_reservation', args=[r.id]))    
    else:
        return response