gerar boletos php em PDF utilizando TCPDF

1,459 views
Skip to first unread message

Lasaro

unread,
Jun 27, 2014, 8:41:13 AM6/27/14
to php-b...@googlegroups.com, ph...@googlegroups.com
Bom dia!

Senhores,

Estou tentando gerar meus boletos em pdf utilizando a biblioteca TCPDF.
Dá erro para gerar a imagem do código de barras, exibindo a informação abaixo:
  TCPDF ERROR: Some data has already been output, can't send PDF file
Alguém já conseguiu contornar esta situação?

Valeu,
Lásaro Carvalho
Site: www.lasarocarvalho.com.br
Antes de imprimir, pense em sua responsabilidade e compromisso com o meio ambiente. 

Ronald Bolsoni Falcão

unread,
Jun 27, 2014, 8:43:42 AM6/27/14
to PHP Brasil
Cara, nunca aconteceu comigo, mas dá uma olhada nessas respostas da comunidade Drupal...


Abraços.





twitter   @ronaldcurtis

"Se você eliminar o impossível o que sobrar, mesmo que improvável, dever ser verdade.
Sir Arthur Conan Doyle


--
Você recebeu essa mensagem porque está inscrito no grupo quot;php-brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para php-brasil+...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para php-b...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/php-brasil.
Para mais opções, acesse https://groups.google.com/d/optout.

Leandro Chaves

unread,
Jun 27, 2014, 8:44:45 AM6/27/14
to php-b...@googlegroups.com, ph...@googlegroups.com
Lasaro,
O erro tá dizendo que você já enviou alguma coisa ao navegador, antes do tcpdf setar o header para pdf.
Você não pode ter nenhum echo, print, etc no seu código antes de gerar o pdf.
Em 27 de junho de 2014 09:41, Lasaro <lasaroc...@gmail.com> escreveu:

--

Lasaro

unread,
Jun 27, 2014, 10:02:17 AM6/27/14
to php-b...@googlegroups.com
Leandro,

Chequei isto. Não há nenhum echo antes.
Quando retiro a chamada da função do código de barras (fbarcode($dadosboleto["codigoBarras"])) funciona.
--

Fabio Branco da Silva

unread,
Jun 30, 2014, 12:44:46 PM6/30/14
to php-b...@googlegroups.com
me manda sua funcao fbarcode q corrijo pra vc, tenho essa aki e veja se te
serve, a proposito gostaria de trocar ideia uma hora dessa contigo sobre
boletos:

segue fbarcode q utilizo:


function fbar_do_zelao($valor) {
$saida = '';
$fino = 1 ;
$largo = 3 ;
$altura = 50 ;
$barcodes[0] = "00110" ;
$barcodes[1] = "10001" ;
$barcodes[2] = "01001" ;
$barcodes[3] = "11000" ;
$barcodes[4] = "00101" ;
$barcodes[5] = "10100" ;
$barcodes[6] = "01100" ;
$barcodes[7] = "00011" ;
$barcodes[8] = "10010" ;
$barcodes[9] = "01010" ;
for($f1=9;$f1>=0;$f1--) {
for($f2=9;$f2>=0;$f2--) {
$f = ($f1 * 10) + $f2 ;
$texto = "" ;
for($i=1;$i<6;$i++) {
$texto .= substr($barcodes[$f1],($i-1),1) . substr($barcodes[$f2],($i-
1),1);
}
$barcodes[$f] = $texto;
}
}
//Desenho da barra
//Guarda inicial
$saida .= "<img src=imagens/p.gif width=".$fino."px height=".$altura."
border=0>";
$saida .= "<img src=imagens/b.gif width=".$fino."px height=".$altura."
border=0>";
$saida .= "<img src=imagens/p.gif width=".$fino."px height=".$altura."
border=0>";
$saida .= "<img src=imagens/b.gif width=".$fino."px height=".$altura."px
border=0>";
$saida .= "<img ";
$texto = $valor ;
if((strlen($texto) % 2) <> 0) {
$texto = "0" . $texto;
}
// Draw dos dados
while (strlen($texto) > 0) {
$i = round(esquerda($texto,2));
$texto = direita($texto,strlen($texto)-2);
$f = $barcodes[$i];
for($i=1;$i<11;$i+=2) {
if(substr($f,($i-1),1) == "0") {
$f1 = $fino ;
} else {
$f1 = $largo ;
}
$saida .= "src=imagens/p.gif width=".$f1."px height=".$altura."px
border=0>";
$saida .= "<img ";
if (substr($f,$i,1) == "0") {
$f2 = $fino ;
} else {
$f2 = $largo ;
}
$saida .= "src=imagens/b.gif width=".$f2."px height=".$altura."px
border=0>";
$saida .= "<img ";
}
}
// Draw guarda final
$saida .= "src=imagens/p.gif width=".$largo."px height=".$altura."px
border=0>";
$saida .= "<img src=imagens/b.gif width=".$fino."px height=".$altura."px
border=0>";
$saida .= "<img src=imagens/p.gif width=".$f1."px height=".$altura."px
border=0>";
return $saida;
}

eu gero 2o via de boletos, tenho rotinas prontas para bradesco e banco do
brasil hoje, gostaria de trocar ideia sobre boletos em carteira com registro,
carteira sem registro tem aquele projeto phpboleto q tem sem carteira, meu
skype: fbra...@hotmail.com


On Fri, 27 Jun 2014 11:02:05 -0300, Lasaro wrote
> Leandro,
>
> Chequei isto. Não há nenhum echo antes.
> Quando retiro a chamada da função do código de barras
> (fbarcode($dadosboleto["codigoBarras"])) funciona.
>
> Em 27 de junho de 2014 09:44, Leandro Chaves <leandro...@gmail.com>
> escreveu:
>
> > Lasaro,
> > O erro tá dizendo que você já enviou alguma coisa ao navegador, antes do
> > tcpdf setar o header para pdf.
> > Você não pode ter nenhum echo, print, etc no seu código antes de gerar o
> > pdf.
> >
> > Leandro Chaves
> >
> > http://leandrochaves.com
> > http://about.me/lchaves
> > @leandrorchaves <http://twitter.com/leandrorchaves>
> > http://meujesus.net
> >
> >
> >
> > Em 27 de junho de 2014 09:41, Lasaro <lasaroc...@gmail.com> escreveu:
> >
> >> Bom dia!
> >>
> >> Senhores,
> >>
> >> Estou tentando gerar meus boletos em pdf utilizando a biblioteca TCPDF.
> >> Dá erro para gerar a imagem do código de barras, exibindo a informação
> >> abaixo:
> >> *TCPDF ERROR: *Some data has already been output, can't send PDF file
> --
> Você está recebendo esta mensagem porque se inscreveu no grupo
> "php-brasil" dos Grupos do Google. Para cancelar inscrição nesse
> grupo e parar de receber e-mails dele, envie um e-mail para php-
brasil+un...@googlegroups.com.
> Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
> Visite este grupo em http://groups.google.com/group/php-brasil.
> Para obter mais opções, acesse https://groups.google.com/d/optout.


--
www.fdnet.com.br

Lasaro

unread,
Jun 30, 2014, 6:00:15 PM6/30/14
to php-b...@googlegroups.com
Fabio,

Aparentemente, não há nenhum erro com minha fbarcode, exibindo como html o boleto roda numa boa, exibe perfeitamente. O problema está na passagem do código de barras para a biblioteca do TC.
Já pesquisei mto e não encontrei mta coisa.
Não domino boletos, utilizo o boleto do boletosPHP e faço as modificações de acordo com o layout que preciso.

Segue abaixo a função que utilizo.
function fbarcode($valor){
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para php-brasil+...@googlegroups.com.
Para postar neste grupo, envie um e-mail para php-b...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/php-brasil.
Para obter mais opções, acesse https://groups.google.com/d/optout.



--

Lasaro

unread,
Jun 30, 2014, 7:08:34 PM6/30/14
to php-b...@googlegroups.com
Fábio, não mandei todo o código, segue abaixo por completo:


 
function fbarcode($valor){
 
$fino = 1 ;
$largo = 3 ;
$altura = 50 ;
 
  $barcodes[0] = "00110" ;
  $barcodes[1] = "10001" ;
  $barcodes[2] = "01001" ;
  $barcodes[3] = "11000" ;
  $barcodes[4] = "00101" ;
  $barcodes[5] = "10100" ;
  $barcodes[6] = "01100" ;
  $barcodes[7] = "00011" ;
  $barcodes[8] = "10010" ;
  $barcodes[9] = "01010" ;
  for($f1=9;$f1>=0;$f1--){ 
    for($f2=9;$f2>=0;$f2--){  
      $f = ($f1 * 10) + $f2 ;
      $texto = "" ;
      for($i=1;$i<6;$i++){ 
        $texto .=  substr($barcodes[$f1],($i-1),1) . substr($barcodes[$f2],($i-1),1);
      }
      $barcodes[$f] = $texto;
    }
  }
 
 
//Desenho da barra
 
 
//Guarda inicial
?><img src=imagens/p.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img 
src=imagens/b.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img 
src=imagens/p.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img 
src=imagens/b.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img 
<?php
$texto = $valor ;
if((strlen($texto) % 2) <> 0){
    $texto = "0" . $texto;
}
 
// Draw dos dados
while (strlen($texto) > 0) {
  $i = round(esquerda($texto,2));
  $texto = direita($texto,strlen($texto)-2);
  $f = $barcodes[$i];
  for($i=1;$i<11;$i+=2){
    if (substr($f,($i-1),1) == "0") {
      $f1 = $fino ;
    }else{
      $f1 = $largo ;
    }
?>
    src=imagens/p.png width=<?php echo $f1?> height=<?php echo $altura?> border=0><img 
<?php
    if (substr($f,$i,1) == "0") {
      $f2 = $fino ;
    }else{
      $f2 = $largo ;
    }
?>
    src=imagens/b.png width=<?php echo $f2?> height=<?php echo $altura?> border=0><img 
<?php
  }
}
 
// Draw guarda final
?>
src=imagens/p.png width=<?php echo $largo?> height=<?php echo $altura?> border=0><img 
src=imagens/b.png width=<?php echo $fino?> height=<?php echo $altura?> border=0><img 
src=imagens/p.png width=<?php echo 1?> height=<?php echo $altura?> border=0> 
  <?php
} //Fim da função
 
function esquerda($entra,$comp){
    return substr($entra,0,$comp);
}
 
function direita($entra,$comp){
    return substr($entra,strlen($entra)-$comp,$comp);
}
 
function fator_vencimento($data) {
    $data = explode("/",$data);
    $ano = $data[2];
    $mes = $data[1];
    $dia = $data[0];
    return(abs((_dateToDays("1997","10","07")) - (_dateToDays($ano, $mes, $dia))));
}
 
function _dateToDays($year,$month,$day) {
    $century = substr($year, 0, 2);
    $year = substr($year, 2, 2);
    if ($month > 2) {
        $month -= 3;
    } else {
        $month += 9;
        if ($year) {
            $year--;
        } else {
            $year = 99;
            $century --;
        }
    }
    return ( floor((  146097 * $century)    /  4 ) +
            floor(( 1461 * $year)        /  4 ) +
            floor(( 153 * $month +  2) /  5 ) +
                $day +  1721119);
}
 
function modulo_10($num) { 
        $numtotal10 = 0;
        $fator = 2;
 
        // Separacao dos numeros
        for ($i = strlen($num); $i > 0; $i--) {
            // pega cada numero isoladamente
            $numeros[$i] = substr($num,$i-1,1);
            // Efetua multiplicacao do numero pelo (falor 10)
            // 2002-07-07 01:33:34 Macete para adequar ao Mod10 do Itaú
            $temp = $numeros[$i] * $fator; 
            $temp0=0;
            foreach (preg_split('//',$temp,-1,PREG_SPLIT_NO_EMPTY) as $k=>$v){ $temp0+=$v; }
            $parcial10[$i] = $temp0; //$numeros[$i] * $fator;
            // monta sequencia para soma dos digitos no (modulo 10)
            $numtotal10 += $parcial10[$i];
            if ($fator == 2) {
                $fator = 1;
            } else {
                $fator = 2; // intercala fator de multiplicacao (modulo 10)
            }
        }
         
        // várias linhas removidas, vide função original
        // Calculo do modulo 10
        $resto = $numtotal10 % 10;
        $digito = 10 - $resto;
        if ($resto == 0) {
            $digito = 0;
        }
         
        return $digito;
         
}
 
function modulo_11($num, $base=9, $r=0)  {
    /**
     *   Autor:
     *           Pablo Costa <pa...@users.sourceforge.net>
     *
     *   Função:
     *    Calculo do Modulo 11 para geracao do digito verificador 
     *    de boletos bancarios conforme documentos obtidos 
     *    da Febraban - www.febraban.org.br 
     *
     *   Entrada:
     *     $num: string numérica para a qual se deseja calcularo digito verificador;
     *     $base: valor maximo de multiplicacao [2-$base]
     *     $r: quando especificado um devolve somente o resto
     *
     *   Saída:
     *     Retorna o Digito verificador.
     *
     *   Observações:
     *     - Script desenvolvido sem nenhum reaproveitamento de código pré existente.
     *     - Assume-se que a verificação do formato das variáveis de entrada é feita antes da execução deste script.
     */                                        
 
    $soma = 0;
    $fator = 2;
 
    /* Separacao dos numeros */
    for ($i = strlen($num); $i > 0; $i--) {
        // pega cada numero isoladamente
        $numeros[$i] = substr($num,$i-1,1);
        // Efetua multiplicacao do numero pelo falor
        $parcial[$i] = $numeros[$i] * $fator;
        // Soma dos digitos
        $soma += $parcial[$i];
        if ($fator == $base) {
            // restaura fator de multiplicacao para 2 
            $fator = 1;
        }
        $fator++;
    }
 
    /* Calculo do modulo 11 */
    if ($r == 0) {
        $soma *= 10;
        $digito = $soma % 11;
        if ($digito == 10) {
            $digito = 0;
        }
        return $digito;
    } elseif ($r == 1){
        $resto = $soma % 11;
        return $resto;
    }
}
 
// Alterada por Glauber Portella para especificação do Itaú
function montaLinhaDigitavel($codigo) {
        // campo 1
        $banco    = substr($codigo,0,3);
        $moeda    = substr($codigo,3,1);
        $ccc      = substr($codigo,19,3);
        $ddnnum   = substr($codigo,22,2);
        $dv1      = modulo_10($banco.$moeda.$ccc.$ddnnum);
        // campo 2
        $resnnum  = substr($codigo,24,6);
        $dac1     = substr($codigo,30,1);//modulo_10($agencia.$conta.$carteira.$nnum);
        $dddag    = substr($codigo,31,3);
        $dv2      = modulo_10($resnnum.$dac1.$dddag);
        // campo 3
        $resag    = substr($codigo,34,1);
        $contadac = substr($codigo,35,6); //substr($codigo,35,5).modulo_10(substr($codigo,35,5));
        $zeros    = substr($codigo,41,3);
        $dv3      = modulo_10($resag.$contadac.$zeros);
        // campo 4
        $dv4      = substr($codigo,4,1);
        // campo 5
        $fator    = substr($codigo,5,4);
        $valor    = substr($codigo,9,10);
         
        $campo1 = substr($banco.$moeda.$ccc.$ddnnum.$dv1,0,5) . '.' . substr($banco.$moeda.$ccc.$ddnnum.$dv1,5,5);
        $campo2 = substr($resnnum.$dac1.$dddag.$dv2,0,5) . '.' . substr($resnnum.$dac1.$dddag.$dv2,5,6);
        $campo3 = substr($resag.$contadac.$zeros.$dv3,0,5) . '.' . substr($resag.$contadac.$zeros.$dv3,5,6);
        $campo4 = $dv4;
        $campo5 = $fator.$valor;
         
        return "$campo1 $campo2 $campo3 $campo4 $campo5"; 
}
 
function geraCodigoBanco($numero) {
    $parte1 = substr($numero, 0, 3);
    $parte2 = modulo_11($parte1);
    return $parte1 . "-" . $parte2;
}

Maicon Pinto

unread,
Jun 30, 2014, 9:39:16 PM6/30/14
to php-b...@googlegroups.com, ph...@googlegroups.com
Oi Lásaro, eu não conheço a biblioteca, mas de qualquer forma, seguindo o erro, faz um teste se possível:

http://pastebin.com/bxVqbNrR

Em resumo, só troquei a parte em que dava "echo" ou exibia HTML, e coloquei em um variável e dei return no final.

Se puder testar e avisar erro ou solução...

;)

Lasaro

unread,
Jul 1, 2014, 9:30:28 AM7/1/14
to php-b...@googlegroups.com, ph...@googlegroups.com
Maico, boa pedida...

Acho que é por ai msm...
Compartilhando o problema com todos é melhor assim chegamos a uma solução mais rápida e esta facilita a vida de mtos que passarem por aqui...
Fiz algumas modificações no código, ele estava apresentando erros de fechaChaves, segue o código com modificações http://pastebin.com/DpRnhdFg
Porém agora está dando erro na linha 6 (
Fatal error: Call to undefined function geraCodigoBanco() in /var/www/html/sindicoatende/funcoes_itau.php on line 6)
Percebi que falta fazer as funções qto a sua pergunta na linha 75 é uma boa, peguei o script pronto então tenho que analizar com mais calma.
Vou analisar com mais calma no decorrer do dia.

Obrigado pela contribuição.
Lásaro Carvalho
Site: www.lasarocarvalho.com.br
Antes de imprimir, pense em sua responsabilidade e compromisso com o meio ambiente.


--
Você recebeu essa mensagem porque está inscrito no grupo quot;php-brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para php-brasil+...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para php-b...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/php-brasil.
Para mais opções, acesse https://groups.google.com/d/optout.



--

Lasaro

unread,
Jul 1, 2014, 9:33:25 AM7/1/14
to php-b...@googlegroups.com, ph...@googlegroups.com
Esqueci de comentar, sei q o erro que apresenta é devido a falta da função...
Vou ter q fazê-la de outra forma? ou seria como a anterior?
No decorrer do código, existem outras funções... sei que terei que refazê-las todas.
--

Lasaro

unread,
Jul 1, 2014, 12:08:11 PM7/1/14
to php-b...@googlegroups.com, ph...@googlegroups.com
Maico,

Acrescentei as funções, e nada.... finalmente mesmo erro, voltamos a estaca zero (TCPDF ERROR: Some data has already been output, can't send PDF file).
Segue o link do código http://pastebin.com/dRrRkDNj
Acho pouco provável o erro estar no layout, por desencargo de consciência, segue o código do meu layout http://pastebin.com/AHCh2As3

Algum palpite?

Valeu pela atenção...

Lásaro Carvalho
Site: www.lasarocarvalho.com.br
Antes de imprimir, pense em sua responsabilidade e compromisso com o meio ambiente.

--

Jean Rafael Tardem Delefrati

unread,
Jul 2, 2014, 8:28:32 AM7/2/14
to php-b...@googlegroups.com
@Lasaro, o problema é saída antes da alteração do cabeçalho pelo PHP, porque o TCPDF altera estes dados.

Pensa o seguinte:

Quando você faz uma requisição de uma página para um computador via TCP/IP, ele vai mandar o pedido para o Apache (ou outro servidor) e o servidor vai tentar entender a requisição pela extensão do arquivo ou por outras configurações que você faça. 

Considerando uma requisição normal, digamos que a extensão do arquivo é .php, o Apache vai enviar um comando para o PHP processar aquela página e esperar um retorno, que, geralmente, é dividido em duas partes: um cabeçalho e o conteúdo da requisição (esse é o padrão TCP/IP). 

Esse cabeçalho tem as informações do arquivo que vai ser exibido, como tipo, tamanho, nome do arquivo etc. e é através dele que o Apache vai saber que tipo de retorno ele vai mandar para o cliente. Você pode até ver pela aba "Rede" do console do Chrome ou do Firebug.

O PHP permite alterar esses cabeçalhos que vão ser enviados para o Apache usando o comando "header". O problema é quando você altera esse comando depois que já mandou para o Apache o "corpo" do arquivo, que é esse o erro que está aparecendo para você. 

No seu caso, o PHP já está te avisando que ele não consegue alterar mais o tipo de retorno para PDF, porque ele já enviou alguma coisa para o Apache e este já enviou para o cliente como texto.

Agora a solução seria retirar qualquer coisa que possa estar sendo enviada para o Apache pelo PHP, eu chuto duas possibilidades: 
- Espaço antes do "<?php" - lembre-se que espaço também é texto
- BOM - Marca de ordem de Byte (Byte Order Mark, explicações aqui: http://pt.wikipedia.org/wiki/Marca_de_ordem_de_byte), que nesse caso você corrige pelo editor que você está usando, você precisa abrir o arquivo e salvar novamente no formato unicode "sem BOM" (https://www.google.com/search?hl=en&q=notepad+salvar+unicode+sem+bom&rlz=1I7GGHP_pt-BR&gws_rd=ssl#hl=en&q=+salvar+unicode+sem+bom)

A outra possibilidade é você ter PHP fechando e abrindo dentro do arquivo ?> tipo assim <?php, que, na prática, é a mesma coisa que dar um echo, mas acho que esse problema o pessoal já corrigiu ali nos e-mails anteriores.

Abraço


Lasaro

unread,
Jul 2, 2014, 6:43:35 PM7/2/14
to php-b...@googlegroups.com
Jean,

Valei pela dica.
Consegui fazer o layout do boleto conforme pretendo. Meu único problema agora é exibir o código de barras na função TCPDF.
O restante já consegui.
Segue meu layout depois de todas as correções http://pastebin.com/9HjWmcyS
Segue as funções http://pastebin.com/0X5NQSb6
O erro não está na função, comentando a linha $pdf->Output(); e dando um echo $html; o código de barras exibe perfeitamente.

Vc tem alguma idéia de onde esteja o erro?

Valeu,
Lásaro Carvalho
Site: www.lasarocarvalho.com.br
Antes de imprimir, pense em sua responsabilidade e compromisso com o meio ambiente.

Leandro Chaves

unread,
Jul 3, 2014, 7:11:19 AM7/3/14
to php-b...@googlegroups.com
Lazaro,
Faz um teste.
Coloca ob_start(http://www.php.net/manual/pt_BR/function.ob-start.php) no início do seu script, ele tem que estar antes da execução de qualquer outro código, bom no início do arquivo que é chamado pelo navegador.

E antes de do $pdf->Output(), usa ob_end_clean(http://www.php.net/manual/pt_BR/function.ob-end-clean.php).



Lasaro

unread,
Jul 3, 2014, 7:48:59 AM7/3/14
to php-b...@googlegroups.com
Leandro,

Fiz uns testes aqui e não funfou...
Inseri os códigos no layout conforme abaixo:
<?php
ob_start();
//resto do código

ob_end_clean();
$pdf->Output();
 
//$pdf->Output("teste.pdf","D");
?>


Lásaro Carvalho
Site: www.lasarocarvalho.com.br
Antes de imprimir, pense em sua responsabilidade e compromisso com o meio ambiente.


Weliton Júnior

unread,
Jul 3, 2014, 1:16:22 PM7/3/14
to php-b...@googlegroups.com
Lasaro,

Tive um problema com o código de barras em um boleto e resolvi alterando a função que montava ele. Altere a função que monta o código de barras por essa que estou encaminhando e concatena com $html. A função faz a mesma coisa que a sua, só que não usa imagens..


    function codigoBarra($linhaDigitavel) {
        $codigo = $linhaDigitavel;
        $barcodes = array('00110', '10001', '01001', '11000', '00101', '10100', '01100', '00011', '10010', '01010');
        $barraStart = '<div class="barcode"><div class="black thin"></div><div class="white thin"></div><div class="black thin"></div><div class="white thin"></div>';
        $barraStop = '<div class="black large"></div><div class="white thin"></div><div class="black thin"></div></div>';
        $retorno = "";

        for ($a = 9; $a >= 0; $a--) {
            for ($b = 9; $b >= 0; $b--) {
                $ind = ($a * 10) + $b;
                $texto = "";

                for ($c = 1; $c < 6; $c++) {
                    $texto .= substr($barcodes[$a], ($c - 1), 1) . substr($barcodes[$b], ($c - 1), 1);
                }
                $barcodes[$ind] = $texto;
            }
        }

        while (strlen($codigo) > 0) {
            $codEsq = (int) round($this->esquerda($codigo, 2));
            $codigo = $this->direita($codigo, strlen($codigo) - 2);
            $binario = $barcodes[$codEsq];

            for ($i = 1; $i < 11; $i += 2) {
                $retorno .= "<div class='black " . (substr($binario, ($i - 1), 1) == "0" ? "thin" : "large") . "'></div>";
                $retorno .= "<div class='white " . (substr($binario, $i, 1) == "0" ? "thin" : "large") . "'></div>";
            }
        }

        return $barraStart . $retorno . $barraStop;
    }

// 
.barcode .thin.black {
    border-left-width: 1px;
}
.barcode .thin.white {
    width: 1px;
}
.barcode .large.black {
    border-left-width: 3px;
}
.barcode .large.white {
    width: 3px;
}
.barcode .black {
    border-color: #000;
    border-left-style: solid;
    width: 0;
}
.barcode .white {
    background: none repeat scroll 0 0 #fff;
}

.barcode div {
    display: inline-block;
    height: 100%;
}


Abraços,

Weliton Vieira Júnior
http://about.me/welitonjunior

Lasaro

unread,
Jul 3, 2014, 1:27:26 PM7/3/14
to php-b...@googlegroups.com
Welliton,

É mais ou menos por aí msm.
Pesquisando na web descobri que o TCPDF tem funções exclusivas para gerar códigos de barras:

Barcodes

  1. [HTML] [PHP] 1D barcode in HTML format
  2. [PNG] [PHP] 1D barcode in PNG format
  3. [SVG] [PHP] 1D barcode in SVG format
  4. [SVGI] [PHP] 1D barcode in SVGI format
  5. [HTML] [PHP] 2D datamatrix barcode in HTML format
  6. [PNG] [PHP] 2D datamatrix barcode in PNG format
  7. [SVG] [PHP] 2D datamatrix barcode in SVG format
  8. [SVGI] [PHP] 2D datamatrix barcode in SVGI format
  9. [HTML] [PHP] 2D pdf417 barcode in HTML format
  10. [PNG] [PHP] 2D pdf417 barcode in PNG format
  11. [SVG] [PHP] 2D pdf417 barcode in SVG format
  12. [SVGI] [PHP] 2D pdf417 barcode in SVGI format
  13. [HTML] [PHP] 2D qrcode barcode in HTML format
  14. [PNG] [PHP] 2D qrcode barcode in PNG format
  15. [SVG] [PHP] 2D qrcode barcode in SVG format
  16. [SVGI] [PHP] 2D qrcode barcode in SVGI format

Estou pesquisando como passar os parâmetros...

A sua seria uma boa, tentei utilizar não consegui. Também pelo mesmo motivo que não consegui utilizar do TC.

Como passo os valores para sua função? como chamo a função no layout?


Obrigado pela atenção.


abs,


Lásaro Carvalho

Site:
www.lasarocarvalho.com.br
Antes de imprimir, pense em sua responsabilidade e compromisso com o meio ambiente.

Lasaro

unread,
Jul 3, 2014, 1:51:13 PM7/3/14
to php-b...@googlegroups.com
Descobri como passar valores para o tc... até o fim do dia consigo matar esta onça...
// include 1D barcode class (search for installation path)
require_once('tcpdf/tcpdf_barcodes_1d.php');

// set the barcode content and type
$barcodeobj = new TCPDFBarcode('http://www.tcpdf.org', 'C128');

// output the barcode as SVG inline code
//echo $barcodeobj->getBarcodeSVGcode(2, 40, 'black');
//$barcodeobj = new TCPDFBarcode('123456', 'C128');
$barcodeobj = new TCPDFBarcode('123456', 'C128');
echo $barcodeobj->getBarcodeHTML(2, 30, 'black');

Weliton Júnior

unread,
Jul 3, 2014, 5:24:27 PM7/3/14
to php-b...@googlegroups.com

Lasaro,

Quando você tentou utilizar deu que erro?

Olhando seu código no pastebin, coloque antes da linha: $pdf->writeHTML($html); isso:

         - $html.= 
codigoBarra($dadosboleto["codigo_barras"]);


Abraços,

Weliton Vieira Júnior
http://about.me/welitonjunior


Em 3 de julho de 2014 14:27, Lasaro <lasaroc...@gmail.com> escreveu:

Lasaro

unread,
Jul 8, 2014, 6:29:34 PM7/8/14
to php-b...@googlegroups.com, ph...@googlegroups.com
Prezados,

Consegui gerar código de barras utilizando o TCPDF.
Para quem precisar, segue uma breve explicação de como fiz.

No arquivo do layout você faz um include da biblioteca: require_once('tcpdf/tcpdf_barcodes_1d.php');
Como utilizei os códigos do boleto php, precisei retirar os pontos da linha digitável, utilizei str_replace: $linhaDigitavelTC=str_replace(".", "", $dadosboleto["linhaDigitavel"]);
Em seguida armazenei na variável $params uma função que chama o a biblioteca enviando a linha digitável: $params = $pdf->serializeTCPDFtagParameters(array($linhaDigitavelTC, 'C128', '', '', 100, 10, 1, array('position'=>'S',  'bgcolor'=>array(255,255,255)), 'N'));    
Após, concatenei o código com o html: $html .= '<tcpdf method="write1DBarcode" params="'.$params.'" />';   
 
Consegui desta forma, se eu estiver enganado em alguma coisa, quem puder me corrigir eu agradeço.
Enviarei meus boletos ainda hoje para homologação.

Abs,
Lásaro


Elizandro Lima

unread,
Nov 11, 2016, 4:21:47 PM11/11/16
to php-brasil, ph...@googlegroups.com
Tenta algo assim para limpar a memória, na maioria das vezes resolve
//set name file pdf in output
ob_start();
$pdf -> output('nome do arquivo de saida'.pdf', 'I');
ob_end_flush()

abraços

Luciano da Silva Martins

unread,
Nov 11, 2016, 5:01:59 PM11/11/16
to php-brasil, ph...@googlegroups.com
Amigo essa thread já tem 2 anos e devem ter resolvido a pendenga.

Lasaro

unread,
Jan 30, 2017, 12:04:58 PM1/30/17
to php-b...@googlegroups.com
Amigos,

Como o Luciano informou, já  resolvi o problema...
Inclusive comentei a solução.

Abs,
Lásaro Carvalho - Site: www.lasarocarvalho.com.br

Antes de imprimir, pense em sua responsabilidade e compromisso com o meio ambiente.

--
Você recebeu essa mensagem porque está inscrito no grupo "php-brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para php-brasil+unsubscribe@googlegroups.com.

Para postar nesse grupo, envie um e-mail para php-b...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--


Reply all
Reply to author
Forward
0 new messages