pdf-generation - 使用 reportlab python 库的Bangla语言生成PDF生成 PDF

  显示原文与译文双语对照的内容
69 2

我已经尝试在 BANGALA labguage中生成 PDF 。 在这里我添加了 Bangla uni代码。 但我的PDF不是 genated correclty 。 这里我添加了代码Fragment和图像输出。 为什么字体不能正常工作或者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

时间: 原作者:

90 5

我可以看到默认canvas_basefontname的"宋体"在reportlab配置文档中看到,所以我将改为所需字体。 that`s 。我在这个链路上添加了波纹管代码字母。


from reportlab import rl_config


rl_config._SAVED['canvas_basefontname'] = 'bangla'


rl_config._startUp()



...