Найти - Пользователи
Полная версия: Reportlab: нулевой отступ слева
Начало » Python для экспертов » Reportlab: нулевой отступ слева
1
j2a
Требуется сделать нулевой отступ слева.

Проблема в том, что 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, если существенно.
j2a
решено: нужно добавить codestyle.leftIndent = 0
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB