Inline Detail BandΒΆ
This report prints a detail band in “inline display”, like an HTML <div> tag, with display: inline and float: left.
It is useful to make labels:
import os
cur_dir = os.path.dirname(os.path.abspath(__file__))
from django.contrib.auth.models import User
from reportlab.lib.pagesizes import LETTER
from reportlab.lib.units import cm
from reportlab.lib.enums import TA_CENTER, TA_RIGHT
from geraldo import Report, ReportBand, Label, ObjectValue, SystemField,\
FIELD_ACTION_COUNT, BAND_WIDTH
class LabelsReport(Report):
page_size = LETTER
margin_left = 0.48*cm
margin_right = 0.48*cm
margin_top = 1.27*cm
margin_bottom = 0.5*cm
class band_detail(ReportBand):
height = 2.54*cm
# This is a new attribute to force the band width
width = 6.67*cm
# This attribute forces a distance at right side of the band
margin_right = 0.31*cm
# With this attribute as True, the band will try to align in
# the same line
display_inline = True
elements = [
ObjectValue(attribute_name='get_full_name', top=0, left=0, height=0.7*cm,
get_value=lambda inst: inst.get_full_name() or inst.username,
style={'fontName': 'Helvetica-Bold', 'fontSize': 13}),
Label(text='User ID:', top=0.6*cm, left=0),
ObjectValue(attribute_name='id', top=0.6*cm, left=1.5*cm),
Label(text='E-mail:', top=1.2*cm, left=0),
ObjectValue(attribute_name='email', top=1.2*cm, left=1.5*cm),
]
Generating PDF...
>>> report = LabelsReport(queryset=User.objects.order_by('id'))
>>> from geraldo.generators import PDFGenerator
>>> report.generate_by(PDFGenerator, filename=os.path.join(cur_dir, 'output/inline-detail-report.pdf'))
The Result