【问题标题】:Hindi font is not displaying correct hindi words in the created pdf using python reportlab pdf library印地语字体未在使用 python reportlab pdf 库创建的 pdf 中显示正确的印地语单词
【发布时间】:2017-10-25 06:32:16
【问题描述】:

我正在使用 django 框架中的 reportlab pdf 库来创建印地语的 pdf 报告。我从 PostgreSql 数据库中获取数据,如下所述。

     waterdate      month year   rivername    stationname    distname
2011-06-22 00:00:00 June  2011      नयार       मरोरा           पौड़ी
2011-06-22 00:00:00 June  2011      गंगा        हरिद्वार          हरिद्वार
2011-06-22 00:00:00 June  2011      गंगा        नरोरा/डी0एस0    बुलन्दशहर
2011-06-22 00:00:00 June  2011      गंगा        फतेहगढ़         फर्रूखाबाद
2011-06-22 00:00:00 June  2011      गंगा        गुमटिया          कन्नौज

我已经编写了以下代码以将上表显示为 pdf 文件。

printing.py

from reportlab.lib.pagesizes import letter,A4
from reportlab.platypus import SimpleDocTemplate,Paragraph,Table,TableStyle
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER,TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from .models import Rainfall
pdfmetrics.registerFont(TTFont('Hindi1', 'gargi.ttf'))

class printReport: 
def rainfall_report(self):
    buffer = self.buffer 
    doc = SimpleDocTemplate(self.buffer,rightMargin=10,leftMargin=10,topMargin=25,bottomMargin=25,pagesize=self.pagesize)
    styles = getSampleStyleSheet()
    styles.add(ParagraphStyle(name="TableHeader",alignment=TA_CENTER,))
    styles.add(ParagraphStyle(name="ParagraphTitle", fontSize='11',alignment=TA_JUSTIFY,fontName="FreeSansBold"))
    styles.add(ParagraphStyle(name="Justify", fontSize='11',alignment=TA_JUSTIFY,fontName="FreeSansBold"))
    data = []
    data.append(Paragraph( 'Rainfall Data', styles['Title']))
    data.append(Spacer(1,12))
    table_data =[]
    table_data.append([
        Paragraph('Date', styles['TableHeader']),
        Paragraph('Month', styles['TableHeader']),
        Paragraph('Year',styles['TableHeader']),
        Paragraph('River Name',styles['TableHeader']),
        Paragraph('Station Name',styles['TableHeader']),
        Paragraph('District Name',styles['TableHeader'])
        ])
    rainfall_data = Rainfall.objects.all()[:10]
    for rainfall in rainfall_data:
        table_data.append([
            rainfall.waterdate,
            rainfall.month,
            rainfall.year,
            rainfall.rivername,
            rainfall.stationname, 
            rainfall.districtname
            ])
    user_table = Table(table_data,colWidths=[doc.width/7.0]*7)
    user_table.hAlign = 'CENTER'
    user_table.setStyle(TableStyle(
        [ ('INNERGRID', (0,0), (-1,-1), 0.25 , colors.black),
          ('BOX',(0,0),(-1,-1,),0.5, colors.black ),
          ('VALIGN',(0,0),(-1,0), 'MIDDLE'),
          ('BACKGROUND',(0,0),(-1,0), colors.gray ),
          ('TEXTCOLOR', (0,1), (-1,-1), colors.black),
          ('VALIGN',(2,1),(-3,-1),'MIDDLE'),
          ('ALIGN',(0,1),(-1,-1),'CENTRE'),
          ( 'FONT' , (3,0),(-1,-1) , 'Hindi1') ]))
    data.append(user_table)
    doc.build(data)
    pdf=buffer.getvalue()
    buffer.close()
    return pdf

以上代码将数据显示到 pdf 文件中,如下所示。

如您所见,stationnamedistname 列印地语单词显示不正确,如上述数据库表所述。 例如,हरिद्वार 字在 pdf 文件中显示不正确。

请帮我解决这个问题。 任何帮助将是伟大的应用程序。

【问题讨论】:

  • 很少有 PDF 库能够在呈现印度语言时生成连字。阅读this white paper,了解如果您想正确显示印地语、泰米尔语、泰卢固语、卡纳达语……需要什么。
  • 感谢您的回复。我会过去的。
  • 报告实验室给我写印地语字体带来了很多麻烦。所以我首先将文本转换为 html,然后使用 pdfkit 转换为 PDF。它对我很有效。所以你也可以朝那个方向思考。

标签: python django pdf


【解决方案1】:

你的字体路径是/usr/local/src/test_project/members/templates/members/你可以这样注册字体:

pdfmetrics.registerFont(TTFont('Hindi1', '/usr/local/src/test_project/members/templates/members/gargi.ttf.ttf'))

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 2018-04-21
    • 2023-01-31
    • 1970-01-01
    • 2017-02-12
    相关资源
    最近更新 更多