【问题标题】:Python Reportlab: wrap cyrillic text into table cellPython Reportlab:将西里尔文文本包装到表格单元格中
【发布时间】:2020-11-04 09:33:05
【问题描述】:

我无法将西里尔文字包装到表格单元格中。我使用 pdfmetrics.registerFont 设置显示西里尔符号的字体,但是当文本长于单元格的宽度时,它不会被换行。我尝试使用 getSampleStyleSheet ,然后将文本包装到单元格中,但我得到的是黑框而不是西里尔符号。这是我的代码示例:

from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
from reportlab.platypus import Table, TableStyle
from reportlab.lib import colors


def coord(x, y, unit=1):
    x, y = x * unit, height - h - y * unit
    return x, y


width, height = A4

pdfmetrics.registerFont(TTFont('bold', 'Lora-Bold.ttf'))
pdfmetrics.registerFont(TTFont('regular', 'Lora-Regular.ttf'))

file_name = 'Report2.pdf'
title = 'ПРОТОКОЛ'

new_incidents = [('къс текст', 'къс текст', 'къс текст', 'дълъг текст', 'дълъг текст'),
                 ('къс текст', 'къс текст', 'къс текст', 'дъъъъъллъъгггггг текстттттттттт',
                  'дъъъъъллъъгггггг текстттттттттт')]

pdf = canvas.Canvas(file_name)

table1 = Table(new_incidents, colWidths=[1.6 * cm, 2.8 * cm, 2.8 * cm, 2.5 * cm, 2.5 * cm])

table1.setStyle(TableStyle([('ALIGN', (0, 1), (-1, -1), 'LEFT'),
                            ('ALIGN', (0, 0), (-1, 0), 'CENTER'),
                            ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),
                            ('BOX', (0, 0), (-1, -1), 0.25, colors.black),
                            ('FONT', (0, 0), (-1, 0), 'bold', 9),
                            ('FONT', (0, 1), (-1, -1), 'regular', 8)
                            ]))

elems = []
elems.append(table1)

w, h = table1.wrap(width, height)

table1.wrapOn(pdf, 550, 840)
x, y = coord(1.5, 6, cm)
table1.drawOn(pdf, x, y)

pdf.save()

【问题讨论】:

    标签: word-wrap reportlab cyrillic


    【解决方案1】:

    要换行,您必须使用Paragraph

    首先你需要连接样式:

    styles = getSampleStyleSheet()
    styles["Normal"].fontName = 'regular'
    styleN = styles["Normal"]
    

    然后用 Paragraph 包裹单元格的文本:

    new_incidents = [('къс текст', 'къс текст', 'къс текст', 'дълъг текст', 'дълъг текст'),
                     ('къс текст', 'къс текст', 'къс текст', Paragraph('дъъъъъллъъгггггг текстттттттттт', styleN),
                      Paragraph('дъъъъъллъъгггггг текстттттттттт', styleN))]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      相关资源
      最近更新 更多