A report with all kinds of graphic elements

This is just a report with every graphic element:

import os
cur_dir = os.path.dirname(os.path.abspath(__file__))

from reportlab.lib.pagesizes import A4
from reportlab.lib.units import cm
from reportlab.lib.colors import navy, yellow, red, purple, orange,\
    green, white, blue
from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY

from geraldo import Report, ReportBand, RoundRect, Rect, Line, Circle,\
    Arc, Ellipse, SystemField, Label, BAND_WIDTH, Image

class GraphicsReport(Report):
    title = 'Graphics demonstration'
    print_if_empty = True

    class band_begin(ReportBand):
        height = 15*cm
        elements = [
            RoundRect(left=0.2*cm, top=0.5*cm, width=3*cm, height=2*cm,
                radius=10, stroke_color=purple),
            Rect(left=4*cm, top=1.0*cm, width=3*cm, height=2*cm,
                fill=True, stroke=False, fill_color=orange),
            Line(left=8*cm, top=3*cm, right=9*cm, bottom=0),
            Line(left=9*cm, top=0, right=10*cm, bottom=3*cm),
            Line(left=8.5*cm, top=3*cm, right=9*cm, bottom=6*cm),
            Line(left=9*cm, top=6*cm, right=10*cm, bottom=3*cm),
            Circle(left_center=5*cm, top_center=5*cm, radius=1*cm, fill_color=yellow,
                fill=True),
            Arc(left=1*cm, top=3.0*cm, right=4*cm, bottom=5*cm,
                start_angle=150, extent=100),
            Ellipse(left=1*cm, top=6.0*cm, right=4.5*cm, bottom=8*cm,
                fill_color=blue, fill=True, stroke_width=3),
            Image(left=10*cm, top=6*cm, width=4*cm, height=5.12*cm,
                filename=os.path.join(cur_dir, 'photo.jpg')),
            Image(left=13*cm, top=6*cm,
                filename=os.path.join(cur_dir, 'photo.jpg')),
            #Poligon(), # --> uses drawPath
            Label(text="""<b>William Shakespeare</b> (baptised 26 April 1564 – 23 April 1616)[a] was an English poet and playwright, widely regarded as the greatest writer in the English language and the world's preeminent dramatist.""",
                left=12*cm, top=1*cm, width=6*cm, height=4*cm,
                style={'wordWrap': True, 'borderWidth': 1,
                    'borderColor': green, 'borderPadding': 4,
                    'borderRadius': 2, 'alignment': TA_JUSTIFY}),
        ]

    class band_page_header(ReportBand):
        height = 1.4*cm
        elements = [
            SystemField(expression='%(report_title)s', top=0.1*cm, left=0,
                width=BAND_WIDTH, style={'fontName': 'Helvetica-Bold',
                    'fontSize': 14, 'alignment': TA_CENTER}),
            Label(text="ID", top=0.8*cm, left=0, width=1*cm,
                style={'borderWidth': 1, 'borderColor': green,
                    'borderPadding': 1, 'borderRadius': 2}),
            Label(text="Name", top=0.8*cm, left=3*cm,
                style={'backColor': red, 'textColor': white,
                'fontName': 'Helvetica'}),
        ]
        borders = {'bottom': True}

Generating PDF...

>>> report = GraphicsReport()
>>> from geraldo.generators import PDFGenerator
>>> report.generate_by(PDFGenerator, filename=os.path.join(cur_dir, 'output/graphics-report.pdf'))

The Result