docs: def draw_pdf(buffer, invoice):
      """ Draws the invoice """
      canvas = Canvas(buffer, pagesize=A4)
      canvas.translate(0, 29.7 * cm)
      canvas.setFont('Helvetica', 10)
  
      canvas.saveState()
      header_func(canvas)
      canvas.restoreState()
  
      canvas.saveState()
      footer_func(canvas)
      canvas.restoreState()
  
      canvas.saveState()
      address_func(canvas)
      canvas.restoreState()
  
      # Client address
      textobject = canvas.beginText(1.5 * cm, -2.5 * cm)
      try:
          if invoice.address.invoice_contact_name:
              textobject.textLine(invoice.address.invoice_contact_name)
          textobject.textLine(invoice.address.invoice_address_one)
          if invoice.address.invoice_address_two:
              textobject.textLine(invoice.address.invoice_address_two)
          textobject.textLine(invoice.address.invoice_town)
          if invoice.address.invoice_county:
              textobject.textLine(invoice.address.invoice_county)
          textobject.textLine(invoice.address.invoice_postcode)
          textobject.textLine(invoice.address.country.invoice_name)
      except:
          pass
      canvas.drawText(textobject)
  
      # Info
      textobject = canvas.beginText(1.5 * cm, -6.75 * cm)
      textobject.textLine(u'Invoice ID: %s' % invoice.invoice_id)
      textobject.textLine(u'Invoice Date: %s' % invoice.invoice_date.strftime(
          '%d %b %Y'))
      canvas.drawText(textobject)
  
      # Items
      data = [[u'Quantity', u'Description', u'Amount', u'Total'], ]
      for item in invoice.items.all():
          data.append([
              item.quantity,
              item.description,
              format_currency(item.unit_price, invoice.currency),
              format_currency(item.total(), invoice.currency)
          ])
      data.append([u'', u'', u'Total:', format_currency(invoice.total(),
                   invoice.currency)])
      table = Table(data, colWidths=[2 * cm, 11 * cm, 3 * cm, 3 * cm])
      table.setStyle([
          ('FONT', (0, 0), (-1, -1), 'Helvetica'),
          ('FONTSIZE', (0, 0), (-1, -1), 10),
          ('TEXTCOLOR', (0, 0), (-1, -1), (0.2, 0.2, 0.2)),
          ('GRID', (0, 0), (-1, -2), 1, (0.7, 0.7, 0.7)),
          ('GRID', (-2, -1), (-1, -1), 1, (0.7, 0.7, 0.7)),
          ('ALIGN', (-2, 0), (-1, -1), 'RIGHT'),
          ('BACKGROUND', (0, 0), (-1, 0), (0.8, 0.8, 0.8)),
      ])
      tw, th, = table.wrapOn(canvas, 15 * cm, 19 * cm)
      table.drawOn(canvas, 1 * cm, -8 * cm - th)
  
      canvas.showPage()
      canvas.save()
  
      return canvas