2015-07-21 3 views
6

का उपयोग कर एचटीएमएल से पीडीएफ जेनरेट करें मैं एक नए प्रश्न के साथ वापस आ रहा हूं जिसे मैं जवाब देने में असमर्थ हूं, जिसने पूरे दिन अपने सिर को खरोंच कर दिया है।Django और Reportlab

मैं "पीडीएफ डाउनलोड करें" बटन पर क्लिक करके किसी वेबपृष्ठ से पीडीएफ जेनरेट करना चाहता हूं। मैं Reportlab और XHTML2PDF सहित कई मॉड्यूल की कोशिश की लेकिन मैं किसी भी पीडीएफ और न ही इसे डाउनलोड करने उत्पन्न करने में सक्षम नहीं कर रहा हूँ ... यहाँ मैं क्या Reportlab के साथ किया था, तो निम्न है Render HTML to PDF in Django site

- - 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 - -

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") 

]

- - टेम्पलेट एनालिटिक्स/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 %} 
इसके अलावा

, वहाँ पर कार्रवाई करने के लिए एक बेहतर मॉड्यूल है?

उत्तर

7

मैं wkhtmltopdf का उपयोग करने की सलाह दूंगा।

संक्षिप्त उत्तर?

apt-get install wkhtmltopdf 

CentOS/RedHat पर::

yum install wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm 

फिर एक अजगर पैकेज स्थापित रंज: उबंटू पर, एक द्विआधारी स्थापित

pip install pdfkit 

तो कोड:

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) 

लंबे उत्तर और विवरण के लिए, मैंने टी डाल दिया एक ब्लॉग पोस्ट ogether:

http://www.peregrinesalon.com/blog/2015/06/python-3-django-generating-a-pdf-from-markdown-or-html/

कि पीडीएफ निर्माण का ध्यान रखना चाहिए; आपको यह तय करना होगा कि आप डाउनलोड को कैसे संभालना चाहते हैं। सौभाग्य!

+0

बहुत धन्यवाद! यह उपयोग करने के लिए बहुत सरल लगता है! Django के साथ कोड को आप कैसे एकीकृत करेंगे? एक दृश्य के माध्यम से? –

+0

यह आपके द्वारा किए जा रहे कार्यों पर निर्भर करेगा, लेकिन हां, एक दृश्य में सबसे अधिक संभावना है। – FlipperPA

+0

wkhtmltopdf के साथ मेरे पास एक समस्या यह है कि इसे बाहरी बाइनरी की आवश्यकता होती है जो हेरोकू जैसी सेवाओं को तैनात करने में समस्याग्रस्त है। – metakermit

-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')) 
0

आप कहते हैं कि तुम भी अपने पीडीएफ पैदा समस्या हो रही है, मैं सुझाव है कि आप उदाहरण मैं Reportlab, Django-आसान पीडीएफ के साथ xhtml2pdf का उपयोग करने का this answer में उल्लेख किया है से अधिक देखकर शुरू करते हैं। ब्राउज़र में पहले प्रस्तुत करने के लिए पीडीएफ प्राप्त करें और फिर इसे डाउनलोड करने के लिए एक लिंक प्राप्त करने के लिए आगे बढ़ें।

संबंधित मुद्दे