I am coming back with a new question which I am unable to answer, having scratched my head the whole day on it.
我带着一个我无法回答的新问题回来了,整整一天都在我头上划了一刀。
I want to generate a PDF from a webpage by clicking on a "Download PDF" button. I tried several modules including Reportlab and XHTML2PDF but I am not able to generate any pdf nor downloading it... Here is what I did with Reportlab, following Render HTML to PDF in Django site
我想通过点击“下载PDF”按钮从网页生成PDF。我尝试了几个模块,包括Reportlab和XHTML2PDF,但是我无法生成任何pdf,也没有下载它...这是我在Reportlab中做的,在Django网站中将HTML渲染为PDF
-- views.py --
- views.py -
import cStringIO as StringIO
import ho.pisa as pisa
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
from cgi import escape
def index_data(request):
#Code to generate data
return render(request, "analytics/stat.html", locals())
return render_to_pdf(
'analytics/stat.html',
{
'pagesize':'A4',
'mylist': results,
}
)
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))
-- urls.py --
- urls.py -
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$', "analytics.views.main_page", name="main_page"),
url(r'^portail/$', "analytics.views.index_data", name="index"),
url(r'^generate_pdf/$', "analytics.views.GroupPDFGenerate.as_view()", name="generate_pdf")
]
-- Template analytics/stat.html --
- 模板分析/ stat.html -
{% extends "analytics/layout.html" %}
{% block title %}
Audience
{% endblock title %}
{% block head %}
# Script to generate google charts
{% endblock head %}
{% block body %}
<div class="page-header">
<h1 align="center"> Audience </h1>
</div>
<div class="row">
<div class="col-md-1">
<h3 align="center"><a href="/logout/">Logout</a></h3>
<h3 align="center"><a href="statistiques.pdf">Download pdf</a></h3>
</div>
</div>
{% endblock %}
Also, is there a better module to process ?
此外,还有更好的模块可供处理吗?
3 个解决方案
#1
7
I'd recommend using wkhtmltopdf.
我建议使用wkhtmltopdf。
The short answer? On Ubuntu, install a binary:
简短的回答?在Ubuntu上,安装二进制文件:
apt-get install wkhtmltopdf
On CentOS / RedHat:
在CentOS / RedHat上:
yum install wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm
Then pip install a Python package:
然后pip安装一个Python包:
pip install pdfkit
Then the code:
那么代码:
import pdfkit
input_filename = 'README.html'
output_filename = 'README.pdf'
with open(input_filename, 'r') as f:
html_text = f.read()
pdfkit.from_string(html_text, output_filename)
For the long answer and details, I put together a blog post:
对于长篇答案和细节,我整理了一篇博文:
http://www.peregrinesalon.com/blog/2015/06/python-3-django-generating-a-pdf-from-markdown-or-html/
That should take care of the PDF creation; you'll have to decide how you want to handle the download. Good luck!
这应该照顾PDF创建;你必须决定如何处理下载。祝你好运!
#2
0
If you say you are having problems even generating your PDF, I suggest you start by looking over the example I mentioned in this answer of using Reportlab, xhtml2pdf with django-easy-pdf. Get the PDF to render in the browser first and then move on to getting a link for downloading it.
如果你说你甚至在生成PDF时遇到问题,我建议你首先查看我在使用Reportlab,xhtml2pdf和django-easy-pdf的答案中提到的例子。首先在浏览器中呈现PDF,然后继续获取下载链接。
#3
-2
from easy_pdf.rendering import render_to_pdf
def pdf(request):
with open('example.pdf', 'wb') as f2:
f2.write(render_to_pdf('you template', {'user': request.user}, encoding=u'utf-8'))
#1
7
I'd recommend using wkhtmltopdf.
我建议使用wkhtmltopdf。
The short answer? On Ubuntu, install a binary:
简短的回答?在Ubuntu上,安装二进制文件:
apt-get install wkhtmltopdf
On CentOS / RedHat:
在CentOS / RedHat上:
yum install wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm
Then pip install a Python package:
然后pip安装一个Python包:
pip install pdfkit
Then the code:
那么代码:
import pdfkit
input_filename = 'README.html'
output_filename = 'README.pdf'
with open(input_filename, 'r') as f:
html_text = f.read()
pdfkit.from_string(html_text, output_filename)
For the long answer and details, I put together a blog post:
对于长篇答案和细节,我整理了一篇博文:
http://www.peregrinesalon.com/blog/2015/06/python-3-django-generating-a-pdf-from-markdown-or-html/
That should take care of the PDF creation; you'll have to decide how you want to handle the download. Good luck!
这应该照顾PDF创建;你必须决定如何处理下载。祝你好运!
#2
0
If you say you are having problems even generating your PDF, I suggest you start by looking over the example I mentioned in this answer of using Reportlab, xhtml2pdf with django-easy-pdf. Get the PDF to render in the browser first and then move on to getting a link for downloading it.
如果你说你甚至在生成PDF时遇到问题,我建议你首先查看我在使用Reportlab,xhtml2pdf和django-easy-pdf的答案中提到的例子。首先在浏览器中呈现PDF,然后继续获取下载链接。
#3
-2
from easy_pdf.rendering import render_to_pdf
def pdf(request):
with open('example.pdf', 'wb') as f2:
f2.write(render_to_pdf('you template', {'user': request.user}, encoding=u'utf-8'))