Уведомления

Группа в Telegram: @pythonsu

#1 Март 24, 2009 11:34:55

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Reportlab: нулевой отступ слева

Требуется сделать нулевой отступ слева.

Проблема в том, что frame начинается с края, а данные во фрейме – с отступом. Прочитал http://two.pairlist.net/pipermail/reportlab-users/2005-June/004091.html , выставил в 0 “захардкоденные” значения _leftPadding, _rightPading для фрейма:

#!/usr/bin/env python
# also submitted to showmecode: http://showmecode.com/code/100/
text = """
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| N | Ambul.|Insur|Policy | N A M E |Gnd| Birthday | Hospital | Activity status / | Arrival | Discharge |Serv.| DS |DS |Tariff | CTQ | Summ | Summ | Comments |
| | card |comp.|ser/num| | | | | Profile | date | date |qnt. | |typ| | | to pay | to hold | |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
"""

from reportlab.lib import units, styles, pagesizes
from reportlab import platypus as pp

stylesheet = styles.getSampleStyleSheet()
codestyle = stylesheet['Code']
codestyle.fontSize = 7

class ZeroPadDocTemplate(pp.SimpleDocTemplate):
def addPageTemplates(self, pageTemplates):
"""fix up the one and only Frame"""
if pageTemplates:
f = pageTemplates[0].frames[0]
f._leftPadding = f._rightPadding = 0
f._geom()
f.showBoundary = 1
pp.SimpleDocTemplate.addPageTemplates(self, pageTemplates)

def _elements(txt):
elements = [pp.Spacer(0, units.mm)]
for page in txt:
elements += [pp.Preformatted(para, codestyle, dedent=6) for para in page]
elements += [pp.PageBreak()]
return elements

def pdfgen(txt, outname):
elements = _elements(txt)
pagesize = pagesizes.landscape(pagesizes.A4)
doc = ZeroPadDocTemplate(outname, leftMargin=0, rightMargin=0,
pagesize=pagesize, title=outname)
doc.build(elements)

def main():
data = [[text]]
outname = "ex.pdf"
pdfgen(data, outname)

if __name__ == '__main__':
main()
Специально не трогал верх/низ и поставил показ границ – видно что фрейм начинается с краю, но контент обрезается на расстоянии ~8 мм, хотя с правого края показывается весь, до обреза страницы.

Reportlab 2.3, если существенно.



Отредактировано (Март 24, 2009 11:41:25)

Офлайн

#2 Апрель 7, 2009 09:02:56

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Reportlab: нулевой отступ слева

решено: нужно добавить codestyle.leftIndent = 0



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version