(self, boletoDados, x, y)
return self.width, (y + self.heightLine)
Imprime o Recibo do Caixa

    :param boletoDados: Objeto com os dados do boleto a ser preenchido.
        Deve ser subclasse de :class:`pyboleto.data.BoletoData`
    :type boletoDados: :class:`pyboleto.data.BoletoData`
Imprime o Recibo do Caixa
Imprime o Recibo do Caixa
def _drawReciboCaixa(self, boletoDados, x, y):
    """Imprime o Recibo do Caixa

    :param boletoDados: Objeto com os dados do boleto a ser preenchido.
        Deve ser subclasse de :class:`pyboleto.data.BoletoData`
    :type boletoDados: :class:`pyboleto.data.BoletoData`

    """
    self.pdfCanvas.saveState()

    self.pdfCanvas.translate(x, y)

    # De baixo para cima posicao 0,0 esta no canto inferior esquerdo
    self.pdfCanvas.setFont('Helvetica', self.fontSizeTitle)

    y = 1.5 * self.heightLine
    self.pdfCanvas.drawRightString(
      self.width,
      (1.5 * self.heightLine) + self.deltaTitle - 1,
      'Autenticação Mecânica / Ficha de Compensação'
    )

    # Primeira linha depois do codigo de barra
    y += self.heightLine
    self.pdfCanvas.setLineWidth(2)
    self.__horizontalLine(0, y, self.width)
    self.pdfCanvas.drawString(
      self.width - (45 * mm) + self.space,
      y + self.space, 'Código de baixa'
    )
    self.pdfCanvas.drawString(0, y + self.space, 'Sacador / Avalista')

    y += self.heightLine
    self.pdfCanvas.drawString(0, y + self.deltaTitle, 'Sacado')
    sacado = boletoDados.sacado

    # Linha grossa dividindo o Sacado
    y += self.heightLine
    self.pdfCanvas.setLineWidth(2)
    self.__horizontalLine(0, y, self.width)
    self.pdfCanvas.setFont('Helvetica', self.fontSizeValue)
    for i in range(len(sacado)):
      self.pdfCanvas.drawString(
        15 * mm,
        (y - 10) - (i * self.deltaFont),
        sacado[i]
      )
    self.pdfCanvas.setFont('Helvetica', self.fontSizeTitle)

    # Linha vertical limitando todos os campos da direita
    self.pdfCanvas.setLineWidth(1)
    self.__verticalLine(self.width - (45 * mm), y, 9 * self.heightLine)
    self.pdfCanvas.drawString(
      self.width - (45 * mm) + self.space,
      y + self.deltaTitle,
      '(=) Valor cobrado'
    )

    # Campos da direita
    y += self.heightLine
    self.__horizontalLine(self.width - (45 * mm), y, 45 * mm)
    self.pdfCanvas.drawString(
      self.width - (45 * mm) + self.space,
      y + self.deltaTitle,
      '(+) Outros acréscimos'
    )

    y += self.heightLine
    self.__horizontalLine(self.width - (45 * mm), y, 45 * mm)
    self.pdfCanvas.drawString(
      self.width - (45 * mm) + self.space,
      y + self.deltaTitle,
      '(+) Mora/Multa'
    )

    y += self.heightLine
    self.__horizontalLine(self.width - (45 * mm), y, 45 * mm)
    self.pdfCanvas.drawString(
      self.width - (45 * mm) + self.space,
      y + self.deltaTitle,
      '(-) Outras deduções'
    )

    y += self.heightLine
    self.__horizontalLine(self.width - (45 * mm), y, 45 * mm)
    self.pdfCanvas.drawString(
      self.width - (45 * mm) + self.space,
      y + self.deltaTitle,
      '(-) Descontos/Abatimentos'
    )
    self.pdfCanvas.drawString(
      0,
      y + self.deltaTitle,
      'Instruções'
    )

    self.pdfCanvas.setFont('Helvetica', self.fontSizeValue)
    instrucoes = boletoDados.instrucoes
    for i in range(len(instrucoes)):
      self.pdfCanvas.drawString(
        2 * self.space,
        y - (i * self.deltaFont),
        instrucoes[i]
      )
    self.pdfCanvas.setFont('Helvetica', self.fontSizeTitle)

    # Linha horizontal com primeiro campo Uso do Banco
    y += self.heightLine
    self.__horizontalLine(0, y, self.width)
    self.pdfCanvas.drawString(0, y + self.deltaTitle, 'Uso do banco')

    self.__verticalLine((30) * mm, y, 2 * self.heightLine)
    self.pdfCanvas.drawString(
      (30 * mm) + self.space,
      y + self.deltaTitle,
      'Carteira'
    )

    self.__verticalLine((30 + 20) * mm, y, self.heightLine)
    self.pdfCanvas.drawString(
      ((30 + 20) * mm) + self.space,
      y + self.deltaTitle,
      'Espécie'
    )

    self.__verticalLine(
      (30 + 20 + 20) * mm,
      y,
      2 * self.heightLine
    )
    self.pdfCanvas.drawString(
      ((30 + 40) * mm) + self.space,
      y + self.deltaTitle,
      'Quantidade'
    )

    self.__verticalLine(
      (30 + 20 + 20 + 20 + 20) * mm, y, 2 * self.heightLine)
    self.pdfCanvas.drawString(
      ((30 + 40 + 40) * mm) + self.space, y + self.deltaTitle, 'Valor')

    self.pdfCanvas.drawString(
      self.width - (45 * mm) + self.space,
      y + self.deltaTitle,
      '(=) Valor documento'
    )

    self.pdfCanvas.setFont('Helvetica', self.fontSizeValue)
    self.pdfCanvas.drawString(
      (30 * mm) + self.space,
      y + self.space,
      boletoDados.carteira
    )
    self.pdfCanvas.drawString(
      ((30 + 20) * mm) + self.space,
      y + self.space,
      boletoDados.especie
    )
    self.pdfCanvas.drawString(
      ((30 + 20 + 20) * mm) + self.space,
      y + self.space,
      boletoDados.quantidade
    )
    valor = self._formataValorParaExibir(boletoDados.valor)
    self.pdfCanvas.drawString(
      ((30 + 20 + 20 + 20 + 20) * mm) + self.space,
      y + self.space,
      valor
    )
    valorDocumento = self._formataValorParaExibir(
      boletoDados.valor_documento
    )
    self.pdfCanvas.drawRightString(
      self.width - 2 * self.space,
      y + self.space,
      valorDocumento
    )
    self.pdfCanvas.setFont('Helvetica', self.fontSizeTitle)

    # Linha horizontal com primeiro campo Data documento
    y += self.heightLine
    self.__horizontalLine(0, y, self.width)
    self.pdfCanvas.drawString(
      0,
      y + self.deltaTitle,
      'Data do documento'
    )
    self.pdfCanvas.drawString(
      (30 * mm) + self.space,
      y + self.deltaTitle,
      'N. do documento'
    )
    self.pdfCanvas.drawString(
      ((30 + 40) * mm) + self.space,
      y + self.deltaTitle,
      'Espécie doc'
    )
    self.__verticalLine(
      (30 + 20 + 20 + 20) * mm,
      y,
      self.heightLine
    )
    self.pdfCanvas.drawString(
      ((30 + 40 + 20) * mm) + self.space,
      y + self.deltaTitle,
      'Aceite'
    )
    self.pdfCanvas.drawString(
      ((30 + 40 + 40) * mm) + self.space,
      y + self.deltaTitle,
      'Data processamento'
    )
    self.pdfCanvas.drawString(
      self.width - (45 * mm) + self.space,
      y + self.deltaTitle,
      'Nosso número'
    )

    self.pdfCanvas.setFont('Helvetica', self.fontSizeValue)
    self.pdfCanvas.drawString(
      0,
      y + self.space,
      boletoDados.data_documento.strftime('%d/%m/%Y')
    )
    self.pdfCanvas.drawString(
      (30 * mm) + self.space,
      y + self.space,
      boletoDados.numero_documento
    )
    self.pdfCanvas.drawString(
      ((30 + 40) * mm) + self.space,
      y + self.space,
      boletoDados.especie_documento
    )
    self.pdfCanvas.drawString(
      ((30 + 40 + 20) * mm) + self.space,
      y + self.space,
      boletoDados.aceite
    )
    self.pdfCanvas.drawString(
      ((30 + 40 + 40) * mm) + self.space,
      y + self.space,
      boletoDados.data_processamento.strftime('%d/%m/%Y')
    )
    self.pdfCanvas.drawRightString(
      self.width - 2 * self.space,
      y + self.space,
      boletoDados.format_nosso_numero()
    )
    self.pdfCanvas.setFont('Helvetica', self.fontSizeTitle)

    # Linha horizontal com primeiro campo Cedente
    y += self.heightLine
    self.__horizontalLine(0, y, self.width)
    self.pdfCanvas.drawString(0, y + self.deltaTitle, 'Cedente')
    self.pdfCanvas.drawString(
      self.width - (45 * mm) + self.space,
      y + self.deltaTitle,
      'Agência/Código cedente'
    )

    self.pdfCanvas.setFont('Helvetica', self.fontSizeValue)
    self.pdfCanvas.drawString(0, y + self.space, boletoDados.cedente)
    self.pdfCanvas.drawRightString(
      self.width - 2 * self.space,
      y + self.space,
      boletoDados.agencia_conta_cedente
    )
    self.pdfCanvas.setFont('Helvetica', self.fontSizeTitle)

    # Linha horizontal com primeiro campo Local de Pagamento
    y += self.heightLine
    self.__horizontalLine(0, y, self.width)
    self.pdfCanvas.drawString(
      0,
      y + self.deltaTitle,
      'Local de pagamento'
    )
    self.pdfCanvas.drawString(
      self.width - (45 * mm) + self.space,
      y + self.deltaTitle,
      'Vencimento'
    )

    self.pdfCanvas.setFont('Helvetica', self.fontSizeValue)
    self.pdfCanvas.drawString(
      0,
      y + self.space,
      boletoDados.local_pagamento
    )
    self.pdfCanvas.drawRightString(
      self.width - 2 * self.space,
      y + self.space,
      boletoDados.data_vencimento.strftime('%d/%m/%Y')
    )
    self.pdfCanvas.setFont('Helvetica', self.fontSizeTitle)

    # Linha grossa com primeiro campo logo tipo do banco
    self.pdfCanvas.setLineWidth(3)
    y += self.heightLine
    self.__horizontalLine(0, y, self.width)
    self.pdfCanvas.setLineWidth(2)
    self.__verticalLine(40 * mm, y, self.heightLine)  # Logo Tipo
    self.__verticalLine(60 * mm, y, self.heightLine)  # Numero do Banco

    if boletoDados.logo_image:
      logo_image_path = self._load_image(boletoDados.logo_image)
      self.pdfCanvas.drawImage(
        logo_image_path,
        0,
        y + self.space + 1,
        40 * mm,
        self.heightLine,
        preserveAspectRatio=True,
        anchor='sw'
      )
    self.pdfCanvas.setFont('Helvetica-Bold', 18)
    self.pdfCanvas.drawCentredString(
      50 * mm,
      y + 2 * self.space,
      boletoDados.codigo_dv_banco
    )
    self.pdfCanvas.setFont('Helvetica-Bold', 11.5)
    self.pdfCanvas.drawRightString(
      self.width,
      y + 2 * self.space,
      boletoDados.linha_digitavel
    )

    # Codigo de barras
    self._codigoBarraI25(boletoDados.barcode, 2 * self.space, 0)

    self.pdfCanvas.restoreState()

    return self.width, (y + self.heightLine)
def _drawReciboCaixa ( self , boletoDados , x , y ) : self . pdfCanvas . saveState ( ) self . pdfCanvas . translate ( x , y ) # De baixo para cima posicao 0,0 esta no canto inferior esquerdo self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeTitle ) y = 1.5 * self . heightLine self . pdfCanvas . drawRightString ( self . width , ( 1.5 * self . heightLine ) + self . deltaTitle - 1 , 'Autenticação Mecânica / Ficha de Compensação' ) # Primeira linha depois do codigo de barra y += self . heightLine self . pdfCanvas . setLineWidth ( 2 ) self . __horizontalLine ( 0 , y , self . width ) self . pdfCanvas . drawString ( self . width - ( 45 * mm ) + self . space , y + self . space , 'Código de baixa' ) self . pdfCanvas . drawString ( 0 , y + self . space , 'Sacador / Avalista' ) y += self . heightLine self . pdfCanvas . drawString ( 0 , y + self . deltaTitle , 'Sacado' ) sacado = boletoDados . sacado # Linha grossa dividindo o Sacado y += self . heightLine self . pdfCanvas . setLineWidth ( 2 ) self . __horizontalLine ( 0 , y , self . width ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeValue ) for i in range ( len ( sacado ) ) : self . pdfCanvas . drawString ( 15 * mm , ( y - 10 ) - ( i * self . deltaFont ) , sacado [ i ] ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeTitle ) # Linha vertical limitando todos os campos da direita self . pdfCanvas . setLineWidth ( 1 ) self . __verticalLine ( self . width - ( 45 * mm ) , y , 9 * self . heightLine ) self . pdfCanvas . drawString ( self . width - ( 45 * mm ) + self . space , y + self . deltaTitle , '(=) Valor cobrado' ) # Campos da direita y += self . heightLine self . __horizontalLine ( self . width - ( 45 * mm ) , y , 45 * mm ) self . pdfCanvas . drawString ( self . width - ( 45 * mm ) + self . space , y + self . deltaTitle , '(+) Outros acréscimos' ) y += self . heightLine self . __horizontalLine ( self . width - ( 45 * mm ) , y , 45 * mm ) self . pdfCanvas . drawString ( self . width - ( 45 * mm ) + self . space , y + self . deltaTitle , '(+) Mora/Multa' ) y += self . heightLine self . __horizontalLine ( self . width - ( 45 * mm ) , y , 45 * mm ) self . pdfCanvas . drawString ( self . width - ( 45 * mm ) + self . space , y + self . deltaTitle , '(-) Outras deduções' ) y += self . heightLine self . __horizontalLine ( self . width - ( 45 * mm ) , y , 45 * mm ) self . pdfCanvas . drawString ( self . width - ( 45 * mm ) + self . space , y + self . deltaTitle , '(-) Descontos/Abatimentos' ) self . pdfCanvas . drawString ( 0 , y + self . deltaTitle , 'Instruções' ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeValue ) instrucoes = boletoDados . instrucoes for i in range ( len ( instrucoes ) ) : self . pdfCanvas . drawString ( 2 * self . space , y - ( i * self . deltaFont ) , instrucoes [ i ] ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeTitle ) # Linha horizontal com primeiro campo Uso do Banco y += self . heightLine self . __horizontalLine ( 0 , y , self . width ) self . pdfCanvas . drawString ( 0 , y + self . deltaTitle , 'Uso do banco' ) self . __verticalLine ( ( 30 ) * mm , y , 2 * self . heightLine ) self . pdfCanvas . drawString ( ( 30 * mm ) + self . space , y + self . deltaTitle , 'Carteira' ) self . __verticalLine ( ( 30 + 20 ) * mm , y , self . heightLine ) self . pdfCanvas . drawString ( ( ( 30 + 20 ) * mm ) + self . space , y + self . deltaTitle , 'Espécie' ) self . __verticalLine ( ( 30 + 20 + 20 ) * mm , y , 2 * self . heightLine ) self . pdfCanvas . drawString ( ( ( 30 + 40 ) * mm ) + self . space , y + self . deltaTitle , 'Quantidade' ) self . __verticalLine ( ( 30 + 20 + 20 + 20 + 20 ) * mm , y , 2 * self . heightLine ) self . pdfCanvas . drawString ( ( ( 30 + 40 + 40 ) * mm ) + self . space , y + self . deltaTitle , 'Valor' ) self . pdfCanvas . drawString ( self . width - ( 45 * mm ) + self . space , y + self . deltaTitle , '(=) Valor documento' ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeValue ) self . pdfCanvas . drawString ( ( 30 * mm ) + self . space , y + self . space , boletoDados . carteira ) self . pdfCanvas . drawString ( ( ( 30 + 20 ) * mm ) + self . space , y + self . space , boletoDados . especie ) self . pdfCanvas . drawString ( ( ( 30 + 20 + 20 ) * mm ) + self . space , y + self . space , boletoDados . quantidade ) valor = self . _formataValorParaExibir ( boletoDados . valor ) self . pdfCanvas . drawString ( ( ( 30 + 20 + 20 + 20 + 20 ) * mm ) + self . space , y + self . space , valor ) valorDocumento = self . _formataValorParaExibir ( boletoDados . valor_documento ) self . pdfCanvas . drawRightString ( self . width - 2 * self . space , y + self . space , valorDocumento ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeTitle ) # Linha horizontal com primeiro campo Data documento y += self . heightLine self . __horizontalLine ( 0 , y , self . width ) self . pdfCanvas . drawString ( 0 , y + self . deltaTitle , 'Data do documento' ) self . pdfCanvas . drawString ( ( 30 * mm ) + self . space , y + self . deltaTitle , 'N. do documento' ) self . pdfCanvas . drawString ( ( ( 30 + 40 ) * mm ) + self . space , y + self . deltaTitle , 'Espécie doc' ) self . __verticalLine ( ( 30 + 20 + 20 + 20 ) * mm , y , self . heightLine ) self . pdfCanvas . drawString ( ( ( 30 + 40 + 20 ) * mm ) + self . space , y + self . deltaTitle , 'Aceite' ) self . pdfCanvas . drawString ( ( ( 30 + 40 + 40 ) * mm ) + self . space , y + self . deltaTitle , 'Data processamento' ) self . pdfCanvas . drawString ( self . width - ( 45 * mm ) + self . space , y + self . deltaTitle , 'Nosso número' ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeValue ) self . pdfCanvas . drawString ( 0 , y + self . space , boletoDados . data_documento . strftime ( '%d/%m/%Y' ) ) self . pdfCanvas . drawString ( ( 30 * mm ) + self . space , y + self . space , boletoDados . numero_documento ) self . pdfCanvas . drawString ( ( ( 30 + 40 ) * mm ) + self . space , y + self . space , boletoDados . especie_documento ) self . pdfCanvas . drawString ( ( ( 30 + 40 + 20 ) * mm ) + self . space , y + self . space , boletoDados . aceite ) self . pdfCanvas . drawString ( ( ( 30 + 40 + 40 ) * mm ) + self . space , y + self . space , boletoDados . data_processamento . strftime ( '%d/%m/%Y' ) ) self . pdfCanvas . drawRightString ( self . width - 2 * self . space , y + self . space , boletoDados . format_nosso_numero ( ) ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeTitle ) # Linha horizontal com primeiro campo Cedente y += self . heightLine self . __horizontalLine ( 0 , y , self . width ) self . pdfCanvas . drawString ( 0 , y + self . deltaTitle , 'Cedente' ) self . pdfCanvas . drawString ( self . width - ( 45 * mm ) + self . space , y + self . deltaTitle , 'Agência/Código cedente' ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeValue ) self . pdfCanvas . drawString ( 0 , y + self . space , boletoDados . cedente ) self . pdfCanvas . drawRightString ( self . width - 2 * self . space , y + self . space , boletoDados . agencia_conta_cedente ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeTitle ) # Linha horizontal com primeiro campo Local de Pagamento y += self . heightLine self . __horizontalLine ( 0 , y , self . width ) self . pdfCanvas . drawString ( 0 , y + self . deltaTitle , 'Local de pagamento' ) self . pdfCanvas . drawString ( self . width - ( 45 * mm ) + self . space , y + self . deltaTitle , 'Vencimento' ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeValue ) self . pdfCanvas . drawString ( 0 , y + self . space , boletoDados . local_pagamento ) self . pdfCanvas . drawRightString ( self . width - 2 * self . space , y + self . space , boletoDados . data_vencimento . strftime ( '%d/%m/%Y' ) ) self . pdfCanvas . setFont ( 'Helvetica' , self . fontSizeTitle ) # Linha grossa com primeiro campo logo tipo do banco self . pdfCanvas . setLineWidth ( 3 ) y += self . heightLine self . __horizontalLine ( 0 , y , self . width ) self . pdfCanvas . setLineWidth ( 2 ) self . __verticalLine ( 40 * mm , y , self . heightLine ) # Logo Tipo self . __verticalLine ( 60 * mm , y , self . heightLine ) # Numero do Banco if boletoDados . logo_image : logo_image_path = self . _load_image ( boletoDados . logo_image ) self . pdfCanvas . drawImage ( logo_image_path , 0 , y + self . space + 1 , 40 * mm , self . heightLine , preserveAspectRatio = True , anchor = 'sw' ) self . pdfCanvas . setFont ( 'Helvetica-Bold' , 18 ) self . pdfCanvas . drawCentredString ( 50 * mm , y + 2 * self . space , boletoDados . codigo_dv_banco ) self . pdfCanvas . setFont ( 'Helvetica-Bold' , 11.5 ) self . pdfCanvas . drawRightString ( self . width , y + 2 * self . space , boletoDados . linha_digitavel ) # Codigo de barras self . _codigoBarraI25 ( boletoDados . barcode , 2 * self . space , 0 ) self . pdfCanvas . restoreState ( ) return self . width , ( y + self . heightLine )