在Django网站中将HTML渲染为PDF

对于我的django网站,我正在寻找一种将动态html页面转换为pdf的简单解决方案。

页面包含HTML和来自Google可视化API的图表(该图表基于javascript,但必须包含这些图表)。

回答:

尝试从Reportlab解决方案。

下载并像往常一样使用python setup.py install安装

你还需要安装以下模块:具有easy_install的xhtml2pdf,html5lib,pypdf。

这是一个用法示例:

首先定义此功能:

import cStringIO as StringIO

from xhtml2pdf import pisa

from django.template.loader import get_template

from django.template import Context

from django.http import HttpResponse

from cgi import escape

def render_to_pdf(template_src, context_dict):

template = get_template(template_src)

context = Context(context_dict)

html = template.render(context)

result = StringIO.StringIO()

pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result)

if not pdf.err:

return HttpResponse(result.getvalue(), content_type='application/pdf')

return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))

然后,你可以像这样使用它:

def myview(request):

#Retrieve data or whatever you need

return render_to_pdf(

'mytemplate.html',

{

'pagesize':'A4',

'mylist': results,

}

)

模板:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>My Title</title>

<style type="text/css">

@page {

size: {{ pagesize }};

margin: 1cm;

@frame footer {

-pdf-frame-content: footerContent;

bottom: 0cm;

margin-left: 9cm;

margin-right: 9cm;

height: 1cm;

}

}

</style>

</head>

<body>

<div>

{% for item in mylist %}

RENDER MY CONTENT

{% endfor %}

</div>

<div id="footerContent">

{%block page_foot%}

Page <pdf:pagenumber>

{%endblock%}

</div>

</body>

</html>

希望能帮助到你。

以上是 在Django网站中将HTML渲染为PDF 的全部内容, 来源链接: utcz.com/qa/417365.html

回到顶部