Reportlab: cabecera con datos de la página.

Estoy usando la función en la página y una plantilla de página para hacer encabezados para un subconjunto de las páginas en mi documento:

templates.append(PageTemplate(id='Overview', frames=frame, onPage=HeaderOverview))

La función de encabezado para esta plantilla:

################################
# Function HeaderOverview - header for overview page
def HeaderOverview(canvas,doc):
    canvas.saveState()
    headboxh = 15
    headboxx = 20
    headboxy = 730
    headboxw = 570
    canvas.rect(headboxx, headboxy, headboxw, headboxh, fill=1)  
    canvas.setFillColor(colors.black)
    canvas.setFont("Helvetica", 14)
    canvas.setFillColor(colors.white)

    canvas.drawString(headboxx + 15,headboxy+.25*headboxh,"Mathematics")
    textWidth = stringWidth("Mathematics", "Helvetica", 12) 
    canvas.setFont("Helvetica", 12)
    canvas.drawString(headboxw - 15 - textWidth,headboxy+.25*headboxh,course)

    canvas.restoreState()

Esto funciona muy bien, excepto que la variable de curso que se pasa (que cambia con cada página de la sección) es la última en la secuencia, ya que esta función no se llama realmente hasta la compilación final (creo que así es como funciona). Lo que necesito es hacer esto para que el valor sea el valor que está en la página. Si pudiera dibujarlo mientras escribo la página en sí, eso también estaría bien. Aquí está mi intento de eso:

####################################################################################
# Function makeGradeOverview(course): makes Overview chart for grade
#
def makeGradeOverview(canvas, course):
    report.append(NextPageTemplate("Overview"))
    report.append(PageBreak())

    headboxh = 50
    headboxx = 20
    headboxy = 600#730
    headboxw = 540

    canvas.saveState()
    canvas.setFont("Helvetica", 12)
    textWidth = stringWidth(course, "Helvetica", 12)
    canvas.drawString(headboxw - 15 - textWidth,headboxy+.25*headboxh,course)
    canvas.restoreState()
    # put course name as title
    if len(course)<=2:
        headerrow = ''.join(['Grade ', course, ' Overview'])
    else:
        headerrow = ''.join([course, ' Overview'])
    report.append(Paragraph(headerrow, styles["Overview Title"]))

    report.append(Spacer(1, 16))

    GridInfo = []
    topics = topiclist(course)

    for topic in topics:
        report.append(Paragraph(topic, styles["Overview Sub"]))
        report.append(Spacer(1, 8))

        subtopics = subtopiclist(course, topic)

        sublist = []
        for subtopic in subtopics:
             report.append(Paragraph(''.join([r'<bullet>&bull</bullet>',subtopic]), styles["Overview Table"]))

Esto no produce un error ni nada, pero tampoco parece que en realidad dibuje nada.

¡Gracias por la ayuda!

Respuestas a la pregunta(1)

Su respuesta a la pregunta