Форум сайта python.su
Требуется сделать нулевой отступ слева.
Проблема в том, что 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()
Отредактировано (Март 24, 2009 11:41:25)
Офлайн
решено: нужно добавить codestyle.leftIndent = 0
Офлайн