对于我的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>
希望能帮助到你。