使用reportlab python库以Bangla语言生成PDF

时间:2017-08-10 06:56:49

标签: python pdf-generation reportlab

我尝试在BANGALA labguage中生成PDF。在这里,我添加了Bangla Uni-Code字体。但是,我的PDF并不具有相关性。在这里,我添加了Code Snippet和Imag的输出。为什么Font无法正常工作或者在Bangla中无法正确生成PDF?

这是我的代码

import os
from io import BytesIO
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4, inch, landscape
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Frame
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from django.http import HttpResponse


def download_pdf_file(request):

    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"'
    buffer = BytesIO()


    doc = SimpleDocTemplate(buffer, pagesize=A4, rightMargin=30, leftMargin=30, topMargin=30,
                            bottomMargin=18)
    doc.pagesize = landscape(A4)
    elements = []
    fontdiractory="/home/osman/font/"
    pdfmetrics.registerFont(TTFont('bangla', os.path.join(fontdiractory, 'Siyamrupali_1_01.ttf')))
    styles = getSampleStyleSheet()
    style_centre = ParagraphStyle(name='centre', parent=styles['Heading2'],fontName='bangla', alignment=TA_CENTER)

    p = Paragraph("গণপ্রজাতন্ত্রী বাংলাদেশ", style_centre)
    elements.append(p)
    p = Paragraph("UEO Office", style_centre)
    elements.append(p)
    p = Paragraph("Upazilla: "+'Tongipara'+ " District: "+'Gopalgonj', style_centre)
    elements.append(p)

    data = [
        ['Govt. Primary School','','','','','','',''],
        ['Ebtedaiye Madrasha','','','','','','',''],
        ['গণপ্রজাতন্ত্রী বাংলাদেশ','','','','','','',''],
        ['Primary school','','','','','','',''],
        ['Primary school','','','','','','',''],
        ['Primary school','','','','','','','']
    ]

    # TODO: Get this line right instead of just copying it from the docs
    style = TableStyle([('ALIGN', (1, 1), (-2, -2), 'RIGHT'),
                        ('TEXTCOLOR', (1, 1), (-2, -2), colors.red),
                        ('VALIGN', (0, 0), (0, -1), 'TOP'),
                        ('TEXTCOLOR', (0, 0), (0, -1), colors.blue),
                        ('ALIGN', (0, -1), (-1, -1), 'CENTER'),
                        ('VALIGN', (0, -1), (-1, -1), 'MIDDLE'),
                        ('TEXTCOLOR', (0, -1), (-1, -1), colors.green),
                        ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),
                        ('BOX', (0, 0), (-1, -1), 0.25, colors.black),
                        ])

    data2 = [[Paragraph(cell, style_centre) for cell in row] for row in data]
    t = Table(data2)
    t.setStyle(style)
    elements.append(t)

    doc.build(elements)
    response.write(buffer.getvalue())
    buffer.close()
    return response

Output Image

1 个答案:

答案 0 :(得分:1)

我可以看到默认的canvas_basefontname是" Helvetica" see in reportlab config doc所以我将canvas_basefontname更改为我需要的字体。就是这样。我在此link中添加了以下代码fount。

from reportlab import rl_config
rl_config._SAVED['canvas_basefontname'] = 'bangla'
rl_config._startUp()