Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 10, 2009 09:47:04

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

reportlab - перенос слов в ячейке таблицы

Всем привет!
подскажите, пожалуйста, что нужно указать чтобы в Table в ячейках был автоперенос слов, если значение в ячейке больше чем заданным ширина колонки?
попробовал задавать параметр splitByRow = 1 и ширину колонок, но это ничего не дало

# -*- coding: utf-8 -*-
PATH = 'project1/static/fonts/'
#
import datetime, os
#
from reportlab.platypus import BaseDocTemplate, SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle
# стили
from reportlab.lib.styles import getSampleStyleSheet
#
from reportlab.lib import units
# для цветов
from reportlab.lib import colors
# для дюймов
from reportlab.lib.units import inch, cm
# для шрифтов
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase import ttfonts
#
from reportlab.pdfgen import canvas
# размеры страниц
from reportlab.lib.pagesizes import A4, landscape
#
from reportlab import rl_config

class genPDF(object):
Title = u"Привет, Мир!"
styles = getSampleStyleSheet()
font_name = 'Times New Roman'
font_size = 9
#
def __init__(self):
#self._set_registerFont()
self.setStyle()
#
def _set_registerFont(self):
Times_New_Roman = ttfonts.TTFont('Times New Roman', PATH + "times.ttf")
pdfmetrics.registerFont(Times_New_Roman)
#
Times_New_Roman_Bold = ttfonts.TTFont('Times New Roman Bold', PATH + "timesbd.ttf")
pdfmetrics.registerFont(Times_New_Roman_Bold)
#
def _set_font(self, canvas):
canvas.setFont(self.font_name, self.font_size)
#
def myFirstPage(self, canvas, doc):
canvas.saveState()
self._set_font(canvas)
canvas.restoreState()
#
def myLaterPages(self, canvas, doc):
canvas.saveState()
self._set_font(canvas)
canvas.restoreState()
#
def run(self):
DocName = datetime.datetime.now().strftime('genpdf_%Y%m%d_%H%M.pdf')
doc = SimpleDocTemplate(DocName,
pagesize = landscape(A4), # размер страницы == альбомный A4
leftMargin = 2 * cm, # отступ слева
rightMargin = 2 * cm, # отступ справа
bottomMargin = 2 * cm, # отступ сверху
topMargin = 2 * cm, # отступ снизу
)
style = self.styles["Normal"]
#
DataTable = [[u'заголовок 1', u'заголовок 2', ], [u'колонка 1 '*100, u'колонка 2', ]]
GridObj = Table(DataTable,
colWidths = [150,150,],
rowHeights = None,
style = self._style,
splitByRow = 1,
#repeatRows = 1,
#repeatCols = 0,
)
#
BGridObj = Table([[GridObj,GridObj]],
colWidths = [320,320,],
rowHeights = None,
style = self._style,
splitByRow = 1,
repeatRows = 1,
#repeatCols = 0,
)
doc.build([BGridObj,], onFirstPage = self.myFirstPage, onLaterPages = self.myLaterPages)
#----------------------------------------------------------------------------------------------------------
# установка стилей и шрифтов
def setStyle(self, style = None):
self._set_registerFont()
if not style:
self._style = [('TEXTCOLOR', (0,0), (0,-1), colors.blue),
('ALIGN', (0,0), (-1,-1), 'LEFT'),
('VALIGN', (0,0), (0,-1), 'TOP'),
('TEXTCOLOR', (0,0), (-1,-1), colors.black),
('INNERGRID', (0,0), (-1,-1), 0.1, colors.black),
('BOX',(0,0),(-1,-1),0.1,colors.black),
('FONTNAME', (0,0),(-1,-1), self.font_name),
('FONTSIZE', (0,0),(-1,-1), self.font_size),
]
else:
self._style = style

if __name__ == '__main__':
genPDF().run()



Офлайн

#2 Апрель 10, 2009 09:50:54

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

reportlab - перенос слов в ячейке таблицы

версия reportlab = 2.1



Офлайн

#3 Апрель 10, 2009 10:31:15

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

reportlab - перенос слов в ячейке таблицы

Вместо строк в таблицу вставляй Paragraph, у которого в стиле поставь wordWrap=True.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version