বাংলায় জ্যাঙ্গো

পাইথন রিপোর্টল্যাব( Reportlab)  লাইব্রেরী ব্যাবহার করে জ্যাঙ্গো সাইটে  পিডিএফ ফাইল তৈরি করা যায়,  কিন্তু প্রক্রিয়াটা একটু জটিল। xhtml2pdf এবং Reportlab লাইব্রেরী ব্যাবহার করে খুব সহজে html পেজ কে pdf ফাইলে রূপান্তর করা যায়।
Reportlab, xhtml2pdf, html5lib, pypdf ইন্সটল করে ফেলুন।

pip install xhtml2pdf

 

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

 

# Render pdf
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 name generate with date    
    date = datetime.date.today()
    tmpName = template_src.split('.')[0]
    pdfName=tmpName + "-"+ str(date)

    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result)
    
    if not pdf.err:
        response = HttpResponse(result.getvalue(), content_type='application/pdf')
        response['Content-Disposition'] = 'attachment; filename='+pdfName+'.pdf'        
        return response
    return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))

 

উপরের অংশ আপনার views.py ফাইলে যুক্ত করুন।

date = datetime.date.today()
tmpName = template_src.split(‘.’)[0]
pdfName=tmpName + “-“+ str(date)

এই অংশ দ্বারা ফাইলের নাম তৈরি করবে। আমি টেমপ্লেটের নামের সাথে পাইথনের ডেটটাইম মডিউল ব্যাবহার করে আজকের দিনের তারিখ  যুক্ত করে ফাইলের নাম তৈরি করেছি। অর্থাৎ , template-name-2016-05-20.pdf

response['Content-Disposition'] = 'attachment; filename='+pdfName+'.pdf'

অংশটি ফাইলের নাম তৈরি করবে।

def myVewFuntion(request):
    posts = Post.objects.all()
    context = {'posts':posts} 
    return render_to_pdf( 'allposts.html',context )

আপনার view ফাংশনে  render_to_pdf রিটার্ন করুন.একটই এইচটিএমএল ফাইল তৈরি করুন। উল্লেখ্য এখানে ইনলাইন  CSS ব্যাবহার করতে হবে। অন্য ফাইল থেকে সংযুক্ত CSS এখানে কাজ করবে না। তাই আপনার Html ফাইলের মধ্যেই স্টাইল কোড লিখতে হবে।

 ##  allposts.html
<!DOCTYPE html>
 <html lang="en">
 <head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>*{margin:0;padding:0;}
.bg{
 width: 100%;
 background-color:#dcdcdc;
}

table {
border-spacing: 0;
border-collapse: separate;
}
.thead td{
  font-weight: bold;
  color:blue;
}
.red
{
  color:red;
  font-weight: bold;
}
.green {
  color:green;
  font-weight: bold;
}
.logo{
  height: 70px;
  width: 60px;
}

.foot{
    border-top: 1px solid black;
}
</style></head>
<body >
{% if posts %}
<div id="admit"> 
    <table class="bg"> 
        <tr> 
            <td class="righthead"> 
                <img class="logo" src="./media/harun.png"> 
                <h1>Harun Or Rashid</h1>            
             </td>
        </tr>
     </table>
     <table class="footer"> 
         <td><strong>@Developed by Harun</strong></td>        
         </tr>
      </table> 
    {% endif %}
    </body>
</html>

 

 

Leave a Reply

avatar
  Subscribe  
Notify of