<?php

namespace Eduardokum\LaravelBoleto\Boleto\Render;

use Eduardokum\LaravelBoleto\Contracts\Boleto\Boleto as BoletoContract;
use Eduardokum\LaravelBoleto\Contracts\Boleto\Render\Pdf as PdfContract;
use Eduardokum\LaravelBoleto\Util;

class PdfItau extends AbstractPdf implements PdfContract
{

    const OUTPUT_STANDARD = 'I';
    const OUTPUT_DOWNLOAD = 'D';
    const OUTPUT_SAVE = 'F';
    const OUTPUT_STRING = 'S';

    private $PadraoFont = 'Arial';
    /**
     * @var BoletoContract[]
     */
    private $boleto = array();

    /**
     * @var bool
     */
    private $print = false;

    /**
     * @var bool
     */
    private $showInstrucoes = true;


    private $desc = 3; // tamanho célula descrição
    private $cell = 4; // tamanho célula dado
    private $fdes = 6; // tamanho fonte descrição
    private $fcel = 8; // tamanho fonte célula
    private $small = 0.2; // tamanho barra fina
    private $totalBoletos = 0;

    public function __construct()
    {
        parent::__construct('P', 'mm', 'A4');
        $this->SetAutoPageBreak(false);
        $this->SetLeftMargin(20);
        $this->SetTopMargin(15);
        $this->SetRightMargin(20);
        $this->SetLineWidth($this->small);
    }

    /**
     * @param integer $i
     *
     * @return $this
     */
    protected function instrucoes($i)
    {
        $this->SetFont($this->PadraoFont, '', 8);
        if ($this->totalBoletos > 1) {
            $this->SetAutoPageBreak(true);
            $this->SetY(5);
            $this->Cell(30, 10, date('d/m/Y H:i:s'));
            $this->Cell(0, 10, "Boleto " . ($i + 1) . " de " . $this->totalBoletos, 0, 1, 'R');
        }

        $this->SetFont($this->PadraoFont, 'B', 8);
        if ($this->showInstrucoes) {
            $this->Cell(0, 5, $this->_('Instruções de Impressão'), 0, 1, 'C');
            $this->Ln(5);
            $this->SetFont($this->PadraoFont, '', 6);
            if (count($this->boleto[$i]->getInstrucoesImpressao()) > 0) {
                $this->listaLinhas($this->boleto[$i]->getInstrucoesImpressao(), 0);
            } else {
                $this->Cell(0, $this->desc, $this->_('- Imprima em impressora jato de tinta (ink jet) ou laser em qualidade normal ou alta (Não use modo econômico).'), 0, 1, 'L');
                $this->Cell(0, $this->desc, $this->_('- Utilize folha A4 (210 x 297 mm) ou Carta (216 x 279 mm) e margens mínimas à esquerda e à direita do formulário.'), 0, 1, 'L');
                $this->Cell(0, $this->desc, $this->_('- Corte na linha indicada. Não rasure, risque, fure ou dobre a região onde se encontra o código de barras.'), 0, 1, 'L');
                $this->Cell(0, $this->desc, $this->_('- Caso não apareça o código de barras no final, clique em F5 para atualizar esta tela.'), 0, 1, 'L');
                $this->Cell(0, $this->desc, $this->_('- Caso tenha problemas ao imprimir, copie a seqüencia numérica abaixo e pague no caixa eletrônico ou no internet banking:'), 0, 1, 'L');
            }
            $this->Ln(4);

            $this->SetFont($this->PadraoFont, '', $this->fcel);
            $this->Cell(25, $this->cell, $this->_('Linha Digitável: '), 0, 0);
            $this->SetFont($this->PadraoFont, 'B', $this->fcel);
            $this->Cell(0, $this->cell, $this->_($this->boleto[$i]->getLinhaDigitavel()), 0, 1);
            $this->SetFont($this->PadraoFont, '', $this->fcel);
            $this->Cell(25, $this->cell, $this->_('Número: '), 0, 0);
            $this->SetFont($this->PadraoFont, 'B', $this->fcel);
            $this->Cell(0, $this->cell, $this->_($this->boleto[$i]->getNumero()), 0, 1);
            $this->SetFont($this->PadraoFont, '', $this->fcel);
            $this->Cell(25, $this->cell, $this->_('Valor: '), 0, 0);
            $this->SetFont($this->PadraoFont, 'B', $this->fcel);
            $this->Cell(0, $this->cell, $this->_(Util::nReal($this->boleto[$i]->getValor())), 0, 1);
            $this->SetFont($this->PadraoFont, '', $this->fcel);
        }

        $this->traco('Recibo do Pagador', 4);
        return $this;
    }

    /**
     * @param integer $i
     *
     * @return $this
     */
    protected function logoEmpresa($i)
    {
        $this->Ln(2);
        $this->SetFont($this->PadraoFont, '', $this->fdes);

        $logo = preg_replace('/\&.*/', '', $this->boleto[$i]->getLogo());
        $ext = pathinfo($logo, PATHINFO_EXTENSION);

        if ($this->boleto[$i]->getLogo() && !empty($this->boleto[$i]->getLogo())) {
            $this->Image($this->boleto[$i]->getLogo(), 20, ($this->GetY()), 0, 12, $ext);
        }
        $this->Cell(56);
        $this->Cell(0, $this->desc, $this->_($this->boleto[$i]->getBeneficiario()->getNome()), 0, 1);
        $this->Cell(56);
        $this->Cell(0, $this->desc, $this->_($this->boleto[$i]->getBeneficiario()->getDocumento(), '##.###.###/####-##'), 0, 1);
        $this->Cell(56);
        $this->Cell(0, $this->desc, $this->_($this->boleto[$i]->getBeneficiario()->getEndereco()), 0, 1);
        $this->Cell(56);
        $this->Cell(0, $this->desc, $this->_($this->boleto[$i]->getBeneficiario()->getCepCidadeUf()), 0, 1);
        $this->Ln(8);

        return $this;
    }

    /**
     * @param integer $i
     *
     * @return $this
     */
    protected function Topo($i)
    {
      //primeira linha
         $this->Ln(8);
         $this->Image($this->boleto[$i]->getLogoBanco(), 20, ($this->GetY()), 20);
         $this->Cell(29, 6, '', 'LR');

         $this->SetFont('', 'B', 13);
         $this->Cell(15, 6, $this->boleto[$i]->getCodigoBancoComDv(), 'LR', 0, 'C');

         $this->SetFont('', 'B', 10);
         $this->Cell(126, 6, $this->boleto[$i]->getLinhaDigitavel(), 'LR', 1,'R');

         $this->SetFont($this->PadraoFont, 'B', $this->fdes);
         $this->Cell(135, $this->desc, $this->_('Local de Pagamento'), 'TLR');
         $this->Cell(35, $this->desc, $this->_('Data de Vencimento'), 'TR',1);

         $this->textFitCell(135, $this->cell, $this->_($this->boleto[$i]->getLocalPagamento()), 'LR', 0, 'L');
         $this->Cell(35, $this->desc, $this->_($this->boleto[$i]->getDataVencimento()->format('d/m/Y')), 'R',1,'R');

         $this->SetFont($this->PadraoFont, 'B', $this->fdes);
         $this->Cell(135, $this->desc, $this->_('Nome do Beneficiário / CNPJ / CPF / Endereço'), 'TLR');
         $this->Cell(35, $this->desc, $this->_('Agência/Código Beneficiário'), 'TR',1);

         $this->textFitCell(135, $this->cell, $this->_($this->boleto[$i]->getBeneficiario()->getNome(). '                 CNPJ ' .$this->boleto[$i]->getBeneficiario()->getDocumento()), 'LR', 0, 'L');
         $this->Cell(35, $this->desc, $this->_(), 'R',1);
         $this->textFitCell(135, $this->cell, $this->_($this->boleto[$i]->getBeneficiario()->getEndereco() .' - ' . $this->boleto[$i]->getBeneficiario()->getBairro() .' - '. $this->boleto[$i]->getBeneficiario()->getCidade() .' - '.$this->boleto[$i]->getBeneficiario()->getUf().' - ' .$this->boleto[$i]->getBeneficiario()->getCep()), 'LR', 0, 'L');
         $this->Cell(35, $this->desc, $this->_($this->boleto[$i]->getAgencia(). '/' .$this->boleto[$i]->getConta() . '-' .$this->boleto[$i]->getContaDv()), 'R',1,'R');


         //quarta linha

         $this->SetFont($this->PadraoFont, '', $this->fdes);
         $this->Cell(33, $this->desc, $this->_('Data do documento'), 'TLR');
         $this->Cell(34, $this->desc, $this->_('Núm. do documento'), 'TR');
         $this->Cell(20, $this->desc, $this->_('Espécie Doc'), 'TLR');
         $this->Cell(14, $this->desc, $this->_('Aceite'), 'TR');
         $this->Cell(34, $this->desc, $this->_('Data do processamento'), 'TR');
         $this->Cell(35, $this->desc, $this->_('Nosso Número'), 'TLR',1);

         $this->SetFont($this->PadraoFont, 'B', $this->fcel);
         $this->Cell(33, $this->cell, $this->_($this->boleto[$i]->getDataDocumento()->format('d/m/Y')), 'LR');
         $this->Cell(34, $this->cell, $this->_($this->boleto[$i]->getNumeroDocumento()), 'R');
         $this->Cell(20, $this->cell, $this->_('DM'), 'R');
         $this->Cell(14, $this->cell, $this->_($this->boleto[$i]->getAceite()), 'R');
         $this->Cell(34, $this->cell, $this->_($this->boleto[$i]->getDataProcessamento()->format('d/m/Y')), 'R');
         $this->Cell(35, $this->cell, $this->_($this->boleto[$i]->getNossoNumeroBoleto()), 'R', 1, 'R');


         $this->SetFont($this->PadraoFont, '', $this->fdes);
         $this->Cell(33, $this->desc, $this->_('Uso do banco'), 'TLR');
         $this->Cell(14, $this->desc, $this->_('Carteira'), 'TR');
         $this->Cell(20, $this->desc, $this->_('Espécie'), 'TR');
         $this->Cell(34, $this->desc, $this->_('Quantidade'), 'TRL');
         $this->Cell(34, $this->desc, $this->_('Valor'), 'TR');
         $this->Cell(35, $this->desc, $this->_('(=) Valor do Documento'), 'TLR',1);

         $this->SetFont($this->PadraoFont, 'B', $this->fcel);
         $this->Cell(33, $this->cell, $this->_(), 'LR');
         $this->Cell(14, $this->cell, $this->_($this->boleto[$i]->getCarteiraNome()), 'R');
         $this->Cell(20, $this->cell, $this->_('R$'), 'LR');
         $this->Cell(34, $this->cell, $this->_(), 'R');
         $this->Cell(34, $this->cell, $this->_(), 'LR');
         $this->Cell(35, $this->cell, $this->_(Util::nReal($this->boleto[$i]->getValor())), 'R', 1, 'R');

         //quinta linha
         $this->SetFont($this->PadraoFont, '', $this->fdes);
         $this->Cell(135, $this->desc, $this->_("Instruções de responsabilidade do beneficiário. Qualquer dúvida sobre este boleto, contate o beneficiário"), 'TLR');
         $this->Cell(35, $this->desc, $this->_('(-) Descontos/Abatimentos'), 'TR', 1);

         $xInstrucoes = $this->GetX();
         $yInstrucoes = $this->GetY();
         $xOriginal = $this->GetX();
         $yOriginal = $this->GetY();

         if (count($this->boleto[$i]->getInstrucoes()) > 0) {
            $this->SetXY($xInstrucoes, $yInstrucoes);
            $this->Ln(1);
            $this->SetFont($this->PadraoFont, 'B', $this->fcel);

            $this->listaLinhas($this->boleto[$i]->getInstrucoes(), 0);

            $this->SetXY($xOriginal, $yOriginal);
         }

        $this->SetFont($this->PadraoFont, '', $this->fdes);
        $this->Cell(135, $this->cell, $this->_(''), 'LR');
        $this->Cell(35, $this->cell, $this->_(''), 'R', 1);

        $this->Cell(135, $this->desc, $this->_(''), 'LR');
        $this->Cell(35, $this->desc, $this->_('(+) Juros/Multa'), 'TR', 1);

        $this->Cell(135, $this->cell, $this->_(''), 'LR');
        $this->Cell(35, $this->cell, $this->_(''), 'R', 1);

        $this->Cell(135, $this->desc, $this->_(''), 'LR');
        $this->Cell(35, $this->desc, $this->_('(=) Valor Pago'), 'TR', 1);
        $this->Cell(135, $this->cell, $this->_(''), 'LR');
        $this->Cell(35, $this->cell, $this->_(''), 'R', 1);

        //sexta linha
        $this->SetFont($this->PadraoFont, '', $this->fdes);
        $this->Cell(100, $this->desc, $this->_('Pagador: '), 'TL');
        $this->Cell(70, $this->desc, $this->_('CPF/CNPJ: '), 'TR',1);


        $this->SetFont($this->PadraoFont, 'B', $this->fcel);
        $this->Cell(100, $this->cell, $this->_($this->boleto[$i]->getPagador()->getNome()),'L');
        $this->Cell(70, $this->cell, $this->_($this->boleto[$i]->getPagador()->getDocumento()),'R',1);

        $this->SetFont($this->PadraoFont, '', $this->fcel);
        $this->Cell(170, $this->desc, $this->_($this->boleto[$i]->getPagador()->getEndereco() .' - '. $this->boleto[$i]->getPagador()->getBairro() .' - '.$this->boleto[$i]->getPagador()->getCidade() .' - '.$this->boleto[$i]->getPagador()->getUf().' - ' .$this->boleto[$i]->getPagador()->getCep()), 'LR',1);

        $this->SetFont($this->PadraoFont, '', $this->fdes);
        $this->Cell(100, $this->desc, $this->_('Sacador/Avalista: '), 'L');
        $this->Cell(70, $this->desc, $this->_('CPF/CNPJ: '), 'R',1);


         $this->SetFont($this->PadraoFont, 'B', $this->fcel);
         $this->Cell(100, $this->cell, $this->_(),'L');
         $this->Cell(70, $this->cell, $this->_(),'R',1);

         $this->SetFont($this->PadraoFont, '', $this->fcel);
         $this->Cell(170, $this->desc, $this->_(), 'BLR',1);

         $this->traco('Corte na linha pontilhada', 5, 10);

         return $this;
    }

    /**
     * @param integer $i
     *
     * @return $this
     */
    protected function Bottom($i)
    {
      //primeira linha
       $this->Ln(8);
       $this->Image($this->boleto[$i]->getLogoBanco(), 20, ($this->GetY()), 20);
       $this->Cell(29, 6, '', 'LR');

       $this->SetFont('', 'B', 13);
       $this->Cell(15, 6, $this->boleto[$i]->getCodigoBancoComDv(), 'LR', 0, 'C');

       $this->SetFont('', 'B', 10);
       $this->Cell(126, 6, $this->boleto[$i]->getLinhaDigitavel(), 'LR', 1,'R');

       $this->SetFont($this->PadraoFont, 'B', $this->fdes);
       $this->Cell(135, $this->desc, $this->_('Local de Pagamento'), 'TLR');
       $this->Cell(35, $this->desc, $this->_('Data de Vencimento'), 'TR',1);

       $this->textFitCell(135, $this->cell, $this->_($this->boleto[$i]->getLocalPagamento()), 'LR', 0, 'L');
       $this->Cell(35, $this->desc, $this->_($this->boleto[$i]->getDataVencimento()->format('d/m/Y')), 'R',1,'R');

       $this->SetFont($this->PadraoFont, 'B', $this->fdes);
       $this->Cell(135, $this->desc, $this->_('Nome do Beneficiário / CNPJ / CPF / Endereço'), 'TLR');
       $this->Cell(35, $this->desc, $this->_('Agência/Código Beneficiário'), 'TR',1);

       $this->textFitCell(135, $this->cell, $this->_($this->boleto[$i]->getBeneficiario()->getNome(). '                 CNPJ ' .$this->boleto[$i]->getBeneficiario()->getDocumento()), 'LR', 0, 'L');
       $this->Cell(35, $this->desc, $this->_(), 'R',1);
       $this->textFitCell(135, $this->cell, $this->_($this->boleto[$i]->getBeneficiario()->getEndereco() .' - ' . $this->boleto[$i]->getBeneficiario()->getBairro() .' - '. $this->boleto[$i]->getBeneficiario()->getCidade() .' - '.$this->boleto[$i]->getBeneficiario()->getUf().' - ' .$this->boleto[$i]->getBeneficiario()->getCep()), 'LR', 0, 'L');
       $this->Cell(35, $this->desc, $this->_($this->boleto[$i]->getAgencia(). '/' .$this->boleto[$i]->getConta() . '-' .$this->boleto[$i]->getContaDv()), 'R',1,'R');


       //quarta linha

       $this->SetFont($this->PadraoFont, '', $this->fdes);
       $this->Cell(33, $this->desc, $this->_('Data do documento'), 'TLR');
       $this->Cell(34, $this->desc, $this->_('Núm. do documento'), 'TR');
       $this->Cell(20, $this->desc, $this->_('Espécie Doc'), 'TLR');
       $this->Cell(14, $this->desc, $this->_('Aceite'), 'TR');
       $this->Cell(34, $this->desc, $this->_('Data do processamento'), 'TR');
       $this->Cell(35, $this->desc, $this->_('Nosso Número'), 'TLR',1);

       $this->SetFont($this->PadraoFont, 'B', $this->fcel);
       $this->Cell(33, $this->cell, $this->_($this->boleto[$i]->getDataDocumento()->format('d/m/Y')), 'LR');
       $this->Cell(34, $this->cell, $this->_($this->boleto[$i]->getNumeroDocumento()), 'R');
       $this->Cell(20, $this->cell, $this->_('DM'), 'R');
       $this->Cell(14, $this->cell, $this->_($this->boleto[$i]->getAceite()), 'R');
       $this->Cell(34, $this->cell, $this->_($this->boleto[$i]->getDataProcessamento()->format('d/m/Y')), 'R');
       $this->Cell(35, $this->cell, $this->_($this->boleto[$i]->getNossoNumeroBoleto()), 'R', 1, 'R');


       $this->SetFont($this->PadraoFont, '', $this->fdes);
       $this->Cell(33, $this->desc, $this->_('Uso do banco'), 'TLR');
       $this->Cell(14, $this->desc, $this->_('Carteira'), 'TR');
       $this->Cell(20, $this->desc, $this->_('Espécie'), 'TR');
       $this->Cell(34, $this->desc, $this->_('Quantidade'), 'TRL');
       $this->Cell(34, $this->desc, $this->_('Valor'), 'TR');
       $this->Cell(35, $this->desc, $this->_('(=) Valor do Documento'), 'TLR',1);

       $this->SetFont($this->PadraoFont, 'B', $this->fcel);
       $this->Cell(33, $this->cell, $this->_(), 'LR');
       $this->Cell(14, $this->cell, $this->_($this->boleto[$i]->getCarteiraNome()), 'R');
       $this->Cell(20, $this->cell, $this->_('R$'), 'LR');
       $this->Cell(34, $this->cell, $this->_(), 'R');
       $this->Cell(34, $this->cell, $this->_(), 'LR');
       $this->Cell(35, $this->cell, $this->_(Util::nReal($this->boleto[$i]->getValor())), 'R', 1, 'R');

       //quinta linha
       $this->SetFont($this->PadraoFont, '', $this->fdes);
       $this->Cell(135, $this->desc, $this->_("Instruções de responsabilidade do beneficiário. Qualquer dúvida sobre este boleto, contate o beneficiário"), 'TLR');
       $this->Cell(35, $this->desc, $this->_('(-) Descontos/Abatimentos'), 'TR', 1);

       $xInstrucoes = $this->GetX();
       $yInstrucoes = $this->GetY();
       $xOriginal = $this->GetX();
       $yOriginal = $this->GetY();

       if (count($this->boleto[$i]->getInstrucoes()) > 0) {
           $this->SetXY($xInstrucoes, $yInstrucoes);
           $this->Ln(1);
           $this->SetFont($this->PadraoFont, 'B', $this->fcel);

           $this->listaLinhas($this->boleto[$i]->getInstrucoes(), 0);

           $this->SetXY($xOriginal, $yOriginal);
       }

       $this->SetFont($this->PadraoFont, '', $this->fdes);
       $this->Cell(135, $this->cell, $this->_(''), 'LR');
       $this->Cell(35, $this->cell, $this->_(''), 'R', 1);

       $this->Cell(135, $this->desc, $this->_(''), 'LR');
       $this->Cell(35, $this->desc, $this->_('(+) Juros/Multa'), 'TR', 1);

       $this->Cell(135, $this->cell, $this->_(''), 'LR');
       $this->Cell(35, $this->cell, $this->_(''), 'R', 1);

       $this->Cell(135, $this->desc, $this->_(''), 'LR');
       $this->Cell(35, $this->desc, $this->_('(=) Valor Pago'), 'TR', 1);
       $this->Cell(135, $this->cell, $this->_(''), 'LR');
       $this->Cell(35, $this->cell, $this->_(''), 'R', 1);

       //sexta linha
       $this->SetFont($this->PadraoFont, '', $this->fdes);
       $this->Cell(100, $this->desc, $this->_('Pagador: '), 'TL');
       $this->Cell(70, $this->desc, $this->_('CPF/CNPJ: '), 'TR',1);


       $this->SetFont($this->PadraoFont, 'B', $this->fcel);
       $this->Cell(100, $this->cell, $this->_($this->boleto[$i]->getPagador()->getNome()),'L');
       $this->Cell(70, $this->cell, $this->_($this->boleto[$i]->getPagador()->getDocumento()),'R',1);

       $this->SetFont($this->PadraoFont, '', $this->fcel);
       $this->Cell(170, $this->desc, $this->_($this->boleto[$i]->getPagador()->getEndereco() .' - '. $this->boleto[$i]->getPagador()->getBairro() .' - '.$this->boleto[$i]->getPagador()->getCidade() .' - '.$this->boleto[$i]->getPagador()->getUf().' - ' .$this->boleto[$i]->getPagador()->getCep()), 'LR',1);

       $this->SetFont($this->PadraoFont, '', $this->fdes);
       $this->Cell(100, $this->desc, $this->_('Sacador/Avalista: '), 'L');
       $this->Cell(70, $this->desc, $this->_('CPF/CNPJ: '), 'R',1);


       $this->SetFont($this->PadraoFont, 'B', $this->fcel);
       $this->Cell(100, $this->cell, $this->_(),'L');
       $this->Cell(70, $this->cell, $this->_(),'R',1);

       $this->SetFont($this->PadraoFont, '', $this->fcel);
       $this->Cell(170, $this->desc, $this->_(), 'BLR',1);
       $this->SetFont($this->PadraoFont, '', $this->fdes);
       $this->Cell(120, $this->desc, $this->_(''));
       $this->Cell(50, $this->desc, $this->_('Ficha de Compensação - Autenticação Mecânica '), '',1);


       $this->Cell(120, 15, '', 0, 1, 'LR');
       $this->i25($this->GetX(), $this->GetY() - 15, $this->boleto[$i]->getCodigoBarras(), 0.8, 17);

        return $this;
    }

    /**
     * @param      string $texto
     * @param integer $ln
     * @param integer $ln2
     */
    protected function traco($texto, $ln = null, $ln2 = null)
    {
        if ($ln == 1 || $ln) {
            $this->Ln($ln);
        }
        $this->SetFont($this->PadraoFont, '', $this->fdes);
        if ($texto) {
            $this->Cell(0, 2, $this->_($texto), 0, 1, 'R');
        }
        $this->Cell(0, 2, str_pad('-', '261', ' -', STR_PAD_RIGHT), 0, 1);
        if ($ln2 == 1 || $ln2) {
            $this->Ln($ln2);
        }
    }

    /**
     * @param integer $i
     */
    protected function codigoBarras($i)
    {
        $this->Ln(3);
        $this->Cell(0, 15, '', 0, 1, 'L');
        $this->i25($this->GetX(), $this->GetY() - 15, $this->boleto[$i]->getCodigoBarras(), 0.8, 17);
    }

    /**
     * Addiciona o boletos
     *
     * @param array $boletos
     * @param bool $withGroup
     *
     * @return $this
     */
    public function addBoletos(array $boletos, $withGroup = true)
    {
        if ($withGroup) {
            $this->StartPageGroup();
        }

        foreach ($boletos as $boleto) {
            $this->addBoleto($boleto);
        }

        return $this;
    }

    /**
     * Addiciona o boleto
     *
     * @param BoletoContract $boleto
     *
     * @return $this
     */
    public function addBoleto(BoletoContract $boleto)
    {
        $this->totalBoletos += 1;
        $this->boleto[] = $boleto;
        return $this;
    }

    /**
     * @return $this
     */
    public function hideInstrucoes()
    {
        $this->showInstrucoes = false;
        return $this;
    }

    /**
     * @return $this
     */
    public function showPrint()
    {
        $this->print = true;
        return $this;
    }

    /**
     * função para gerar o boleto
     *
     * @param string $dest tipo de destino const BOLETOPDF_DEST_STANDARD | BOLETOPDF_DEST_DOWNLOAD | BOLETOPDF_DEST_SAVE | BOLETOPDF_DEST_STRING
     * @param null $save_path
     *
     * @return string
     * @throws \Exception
     */
    public function gerarBoleto($dest = self::OUTPUT_STANDARD, $save_path = null, $nameFile = null)
    {
        if ($this->totalBoletos == 0) {
            throw new \Exception('Nenhum Boleto adicionado');
        }

        for ($i = 0; $i < $this->totalBoletos; $i++) {
            $this->SetDrawColor('0', '0', '0');
            $this->AddPage();
           $this->instrucoes($i)->Topo($i)->Bottom($i);//->codigoBarras($i);
        }
        if ($dest == self::OUTPUT_SAVE) {
            $this->Output($save_path, $dest, $this->print);
            return $save_path;
        }
        if ($nameFile == null) {
            $nameFile = str_random(32);
        }

        return $this->Output($nameFile . '.pdf', $dest, $this->print);
    }

    /**
     * @param $lista
     * @param integer $pulaLinha
     *
     * @return int
     */
    private function listaLinhas($lista, $pulaLinha)
    {
        foreach ($lista as $d) {
            $pulaLinha -= 2;
            $this->MultiCell(0, $this->cell - 0.2, $this->_(preg_replace('/(%)/', '%$1', $d)), 0, 1);
        }

        return $pulaLinha;
    }
}
