Jump to content
rnicson

Problema ao gerar vários boletosPHP

Recommended Posts

Estou com alguns problemas ao gerar boletos em massa usando o sistema de código aberto BoletoPHP,pois preciso fazer com que centenas de boletos sejam gerados em um script através de informações vindas do Banco de dados.

Esses boletos sejam armazenados no servidor dentro de uma pasta onde eu possa efetuar o download deles posteriormente ou envia-los por email.

Mas estou com problemas nas informações vinda da Função_itau,pois a linha do código de barras está vindo com valor de um unico registro em todos os boletos.

E esse sistema deve gerar 126 boleto atualmente mas está gerando apenas 44 por conta da função ob_start() onde testei retirando ela e são gerados todos os 126 registros do banco mas não mostra o boleto no pdf.

Peço a ajuda de alguém que saiba como resolver essa questão que aparentemente é simples,mas estou tendo problemas.

 

Arquivo Que gera o Boleto

<?php
    $mysqli = new mysqli("localhost", "", "", "");
    $query = "SELECT * FROM gerar_boleto";
    $query2 = "SELECT * FROM boletos_gerados ORDER BY id DESC";
    $result = $mysqli->query($query);
    $result2 = $mysqli->query($query2);
    $row2 = $result2->fetch_assoc();
    
    $nosso_Numero = $row2['nosso_numero'];
    while ($row = $result->fetch_assoc()) {
    $valores = $row['valor_boleto'];
    $cliente = $row['cliente'];
    $cnpj = $row['cnpj'];
    $email = $row['email'];
    $documento = $row['documento'];
    $vencimento = $row['data_vencimento'];
    $data_vencimento = date("d/m/Y",strtotime("$vencimento"));
    
    $documento = $row['data_documento'];
    $data_documento = date("d/m/Y",strtotime("$documento"));
    $vencimento_remessa = date("Y-m-d",strtotime("$vencimento"));
    $documento_remessa = date("Y-m-d",strtotime("$documento"));
    $endereco = $row['endereco'];
    $bairro = $row['bairro'];
    $cep = $row['cep'];
    $cidade = $row['cidade'];
    $estado = $row['estado'];
    $id = $row['id'];
    $data = date('m');
    $numero_Documento = "CONT-".date('m')."/".date('Y');
    $posicao_Numero = '320000'.$id;
    $data_atual = date("Y");
    $registro = $posicao_Numero;

// DADOS DO BOLETO PARA O SEU CLIENTE
$dias_de_prazo_para_pagamento = 0;
$taxa_boleto = "0,00";
$data_venc = $data_vencimento;  // Prazo de X dias OU informe data: "13/04/2006"; 
$valor_cobrado = $valores; // Valor - REGRA: Sem pontos na milhar e tanto faz com "." ou "," ou com 1 ou 2 ou sem casa decimal
$valor_cobrado = str_replace(",", ".",$valor_cobrado);
$valor_boleto=number_format($valor_cobrado+$taxa_boleto, 2, ',', '');

$dadosboleto["nosso_numero"] = $posicao_Numero;  // Nosso numero - REGRA: M�ximo de 8 caracteres!
$dadosboleto["numero_documento"] = $numero_Documento;	// Num do pedido ou nosso numero
$dadosboleto["data_vencimento"] = $data_venc; // Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA
$dadosboleto["data_documento"] = $data_documento; // Data de emiss�o do Boleto
$dadosboleto["data_processamento"] = $data_documento; // Data de processamento do boleto (opcional)
$dadosboleto["valor_boleto"] = $valores; 	// Valor do Boleto - REGRA: Com v�rgula e sempre com duas casas depois da virgula

// DADOS DO SEU CLIENTE
$dadosboleto["sacado"] = $cliente .' - '. $cnpj;
$dadosboleto["endereco1"] = $endereco. '-' .$bairro;
$dadosboleto["endereco2"] = $cidade. '-'. $estado. '-  CEP:'. $cep;

// INFORMACOES PARA O CLIENTE
$dadosboleto["demonstrativo1"] = "Filiação - ";
$dadosboleto["demonstrativo2"] = "Contribuição REF. JANEIRO/2019";
$dadosboleto["demonstrativo3"] = " - https://www..org.br";
$dadosboleto["instrucoes1"] = "- Sr. Caixa, não receber após o vencimento";
$dadosboleto["instrucoes2"] = "";
$dadosboleto["instrucoes3"] = "- Em caso de dúvidas entre em contato conosco: ";
$dadosboleto["instrucoes4"] = "  Emitido por ";

// DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE
$dadosboleto["quantidade"] = "1";
$dadosboleto["valor_unitario"] = $valores;
$dadosboleto["aceite"] = "S";		
$dadosboleto["especie"] = "R$";
$dadosboleto["especie_doc"] = "R$";


// ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //


// DADOS DA SUA CONTA - SICREDI
$dadosboleto["agencia"] = "1111"; // Num da agencia, sem digito
$dadosboleto["conta"] = "22222";	// Num da conta, sem digito
$dadosboleto["conta_dv"] = "2"; 	// Digito do Num da conta

// DADOS PERSONALIZADOS - SICREDI
$dadosboleto["carteira"] = "109";

// SEUS DADOS
$dadosboleto["identificacao"] = "NOME";
$dadosboleto["cpf_cnpj"] = "CNPJ";
$dadosboleto["endereco"] = "ENDEREÇO";
$dadosboleto["cidade_uf"] = "CIDADE / ESTADO";
$dadosboleto["cedente"] = "CEDENTE";

ob_start();

// NÃO ALTERAR!
include_once("include/funcoes_itau.php"); 
include("include/layout_sicredi.php");

$content = ob_get_clean();

// convert
require_once(dirname(__FILE__).'/html2pdf/html2pdf.class.php');
try
{
	$html2pdf = new HTML2PDF('P','A4','fr', array(0, 0, 0, 0));
	/* Abre a tela de impressão */
	//$html2pdf->pdf->IncludeJS("print(true);");
	
	$html2pdf->pdf->SetDisplayMode('real');
	
	/* Parametro vuehtml = true desabilita o pdf para desenvolvimento do layout */
	$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
	
	/* Abrir no navegador */
	//$html2pdf->Output('boleto.pdf');
	
	mkdir('boletos/'.date('m-Y'));
	
	
	
	/* Salva o PDF no servidor para enviar por email */
	$html2pdf->Output('boletos/'.date('m-Y').'/'.$id.'.pdf', 'F');
	
	/* Força o download no browser */
	//$html2pdf->Output('boleto'.$id.'.pdf', 'D');
}
catch(HTML2PDF_exception $e) {
	echo $e;
	exit;
	
}
/*
// Inclui o arquivo class.phpmailer.php localizado na pasta class
require_once("PHPMailer_5.2.0/class.phpmailer.php");

// Inicia a classe PHPMailer
$mail = new PHPMailer(true);
 
// Define os dados do servidor e tipo de conexão
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->IsSMTP(); // Define que a mensagem será SMTP
 
try {
     $mail->Host = ''; // Endereço do servidor SMTP (Autenticação, utilize o host smtp.seudomínio.com.br)
     $mail->SMTPAuth   = true;  // Usar autenticação SMTP (obrigatório para smtp.seudomínio.com.br)
     $mail->Port       = 587; //  Usar 587 porta SMTP
     $mail->Username = ''; // Usuário do servidor SMTP (endereço de email)
     $mail->Password = ''; // Senha do servidor SMTP (senha do email usado)
 
     //Define o remetente
     // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=    
     $mail->SetFrom('', ''); //Seu e-mail
     $mail->AddReplyTo('', ''); //Seu e-mail
     $mail->CharSet = 'utf-8';
     $mail->Subject = '';//Assunto do e-mail
 
 
     //Define os destinatário(s)
     //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
     $mail->AddAddress($email, $cliente);
 
     //Campos abaixo são opcionais 
     //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
     //$mail->AddCC('destinarario@dominio.com.br', 'Destinatario'); // Copia
     //$mail->AddBCC('destinatario_oculto@dominio.com.br', 'Destinatario2`'); // Cópia Oculta
     $mail->AddAttachment('boletos/'.date('m-Y').'/'.$cliente.'.pdf');      // Adicionar um anexo
 
 
     //Define o corpo do email
     $mail->MsgHTML("<p>Bom dia</p> 
<p>Prezada Filiada,</p>   
<p></p>  
<p>Segue em anexo boleto referente a contribuição,</p>
<p></p> 
<p></p>  
<p></p>  
<p></p> 
<p></p> 
<p>Dúvidas estou à disposição</p> 
<p>Atenciosamente</p> 


<table border='0' cellpadding='0' cellspacing='0' style='width:347px;' width='347'>
	<tbody>
		<tr>
			<td style='width:205px;height:86px;'>
				<p>
					<img alt='dezembro laranja' height='68' src='https://www.SITE.org.br/mail.jpg' width='217' /></p>
			</td>
			<td style='width:142px;height:86px;'>
				<p>
					<strong></strong></p>
				<p>
					<strong><em></em></strong></p>
				<p>
					<strong></strong></p>
				<p>
			</td>
		</tr>
	</tbody>
</table>
<p>
	 </p>
"); 
 
     ////Caso queira colocar o conteudo de um arquivo utilize o método abaixo ao invés da mensagem no corpo do e-mail.
     //$mail->MsgHTML(file_get_contents('arquivo.html'));
 
     $mail->Send();
     echo "Mensagem enviada com sucesso</p>\n";
 
    //caso apresente algum erro é apresentado abaixo com essa exceção.
    }catch (phpmailerException $e) {
      echo $e->errorMessage(); //Mensagem de erro costumizada do PHPMailer
}
*/

	
$sql="INSERT INTO boletos_gerados (id,nosso_numero, numero_documento, data_vencimento, data_documento, valor_boleto, id_cliente) VALUES ('','$registro','$numero_Documento','$data_vencimento','$data_documento','$valores','$id')";
$insert = $mysqli->query($sql);

$sql2="INSERT INTO boleto_filiadas (id,nosso_numero, numero_documento, data_vencimento, data_documento, valor, nome_cliente, tipo_documento, documento, logradouro, bairro, cep, cidade, estado) VALUES ('','$registro','$numero_Documento','$vencimento_remessa','$documento_remessa','$valores','$cliente','CNPJ','$cnpj','$endereco', '$bairro', '$cep', '$cidade', '$estado')";
$insert2 = $mysqli->query($sql2);
}

 

 

 

Arquivo que possui função para gerar linha do código de barras.

 

 

<?php
// +----------------------------------------------------------------------+
// | BoletoPhp - Versão Beta                                              |
// +----------------------------------------------------------------------+
// | Este arquivo está disponível sob a Licença GPL disponível pela Web   |
// | em http://pt.wikipedia.org/wiki/GNU_General_Public_License           |
// | Você deve ter recebido uma cópia da GNU Public License junto com     |
// | esse pacote; se não, escreva para:                                   |
// |                                                                      |
// | Free Software Foundation, Inc.                                       |
// | 59 Temple Place - Suite 330                                          |
// | Boston, MA 02111-1307, USA.                                          |
// +----------------------------------------------------------------------+

// +----------------------------------------------------------------------+
// | Originado do Projeto BBBoletoFree que tiveram colaborações de Daniel |
// | William Schultz e Leandro Maniezo que por sua vez foi derivado do	  |
// | PHPBoleto de João Prado Maia e Pablo Martins F. Costa				  |
// | 																	  |
// | Se você quer colaborar, nos ajude a desenvolver p/ os demais bancos :-)|
// | Acesse o site do Projeto BoletoPhp: www.boletophp.com.br             |
// +----------------------------------------------------------------------+

// +----------------------------------------------------------------------+
// | Equipe Coordenação Projeto BoletoPhp: <boletophp@boletophp.com.br>   |
// | Desenvolvimento Boleto Itaú: Glauber Portella		                  |
// +----------------------------------------------------------------------+


$codigobanco = "341";
$codigo_banco_com_dv = geraCodigoBanco($codigobanco);
$nummoeda = "9";
$fator_vencimento = fator_vencimento($dadosboleto["data_vencimento"]);

//valor tem 10 digitos, sem virgula
$valor = formata_numero($valores,10,0,"valor");
//agencia é 4 digitos
$agencia = formata_numero($dadosboleto["agencia"],4,0);
//conta é 5 digitos + 1 do dv
$conta = formata_numero($dadosboleto["conta"],5,0);
$conta_dv = formata_numero($dadosboleto["conta_dv"],1,0);
//carteira 175
$carteira = $dadosboleto["carteira"];
//nosso_numero no maximo 8 digitos
$nnum = formata_numero($dadosboleto["nosso_numero"],8,0);

$codigo_barras = $codigobanco.$nummoeda.$fator_vencimento.$valor.$carteira.$nnum.modulo_10($agencia.$conta.$carteira.$nnum).$agencia.$conta.modulo_10($agencia.$conta).'000';
// 43 numeros para o calculo do digito verificador
$dv = digitoVerificador_barra($codigo_barras);
// Numero para o codigo de barras com 44 digitos
$linha = substr($codigo_barras,0,4).$dv.substr($codigo_barras,4,43);

$nossonumero = $carteira.'/'.$nnum.'-'.modulo_10($agencia.$conta.$carteira.$nnum);
$agencia_codigo = $agencia." / ". $conta."-".modulo_10($agencia.$conta);

$dadosboleto["codigo_barras"] = $linha;
$dadosboleto["linha_digitavel"] = monta_linha_digitavel($linha); // verificar
$dadosboleto["agencia_codigo"] = $agencia_codigo ;
$dadosboleto["nosso_numero"] = $nossonumero;
$dadosboleto["codigo_banco_com_dv"] = $codigo_banco_com_dv;


// FUNÇÕES
// Algumas foram retiradas do Projeto PhpBoleto e modificadas para atender as particularidades de cada banco

function digitoVerificador_barra($numero) {
	$resto2 = modulo_11($numero, 9, 1);
	$digito = 11 - $resto2;
     if ($digito == 0 || $digito == 1 || $digito == 10  || $digito == 11) {
        $dv = 1;
     } else {
        $dv = $digito;
     }
	 return $dv;
}

function formata_numero($numero,$loop,$insert,$tipo = "geral") {
	if ($tipo == "geral") {
		$numero = str_replace(",","",$numero);
		while(strlen($numero)<$loop){
			$numero = $insert . $numero;
		}
	}
	if ($tipo == "valor") {
		/*
		retira as virgulas
		formata o numero
		preenche com zeros
		*/
		$numero = str_replace(",","",$numero);
		while(strlen($numero)<$loop){
			$numero = $insert . $numero;
		}
	}
	if ($tipo == "convenio") {
		while(strlen($numero)<$loop){
			$numero = $numero . $insert;
		}
	}
	return $numero;
}


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 <pablo@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 monta_linha_digitavel($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;
}

?>

 

Share this post


Link to post
Share on other sites

Caro amigo, rnicson, saudações...

 

Tenho o seguinte código para gerar Boleto Bancário em PHP, na qual tirei de um livro Faça um Site com PHP.

 

Abaixo o código:

<?PHP
// +---------------------------------------------------------+
// | Emissão do boleto bancário                              |
// +---------------------------------------------------------+

 session_start (); 

 include "inc_dbConexao.php";

 //Captura os itens da cesta
 $sql = "SELECT * ";
 $sql = $sql . " FROM pedidos ";
 $sql = $sql . " WHERE num_ped = '" . $_SESSION['num_ped1'] . "' ";
 $rs = mysql_query($sql, $conexao);
 $reg = mysql_fetch_array($rs);

 $_SESSION['id_cli'] = $reg['id_cliente'];
 $_SESSION['dataped'] = $reg['data'];  //data do pedido
 $_SESSION['horaped'] = $reg['hora'];
 $_SESSION['valor'] = $reg['valor'];
 $_SESSION['valor_frete'] = $reg['frete'];
 $_SESSION['peso'] = $reg['peso'];
 $_SESSION['desconto'] = $reg['desconto'];
 $_SESSION['num_ped'] = $reg['num_ped'];
 $_SESSION['id'] = $reg['id'];
 $_SESSION['datavenc'] = $reg['vencimento']; //data de vencimento
 
// Calcula o valor do boleto
$_SESSION['valor_boleto'] = $_SESSION['valor'] + $_SESSION['valor_frete'] - $_SESSION['desconto'];

// Mantém zeros na casa decimal sem formatação para o cálculo da linha digitável
$_SESSION['valor_boleto1'] = number_format($_SESSION['valor_boleto'],2,'','');

// ******** DADOS DO BOLETO
// DADOS FIXOS DE CONFIGURAÇÃO DO BOLETO
// 1. Dados da sua empresa
$boleto["cedente_nome"] = "Faça um Site Miniaturas Ltda";
$boleto["cedente_cnpj"] = "33.333.333/0001-33";

// 2. Dados da conta bancária da empresa (devem ser confirmados com o banco do cedente)
$boleto['num_banco'] = "000";			// Identificação do Banco (Banco teste = 935)
$boleto['dv_banco'] = "6";				// Identificação do Banco (Banco teste = 935)
$boleto['moeda'] = "9";					// Código da Moeda (Real = 9)
$boleto["num_agencia"] = "1111";		// Num da agência - sem digito verificador
$boleto["dv_agencia"] = "8";			// Dígito verificador da agência
$boleto["num_conta"] = "1234567";		// Num da conta corrente sem o dígito verificador
$boleto["dv_conta"] = "8";				// Digito verificador da conta corrente

// 3. Dados restritos do banco (devem ser confirmados com o banco do cedente)
$boleto["carteira"] = "06";		// Código da Carteira: Consultar seu banco
$boleto["aceite"] = "N";		// Aceite: Consultar seu banco
$boleto["especie"] = "R$";		// Espécie: Consultar seu banco
$boleto["especie_doc"] = "99";	// Espécie documento: Consultar seu banco
$boleto["fixo"] = "0";			// posicao 44 do código de barras

// 4. Informações gerais do boleto
$boleto['dv_codbar'] = "";	// Dígito verificador do Código de Barras

$boleto['fator'] = fator_venc($_SESSION['datavenc']);
$boleto['valor_zeroesq'] = zero_esquerda($_SESSION['valor_boleto1'],10);
$boleto['nosso_numero'] = zero_esquerda($_SESSION['id'],11);

// Taxa de cobrança para envio do boleto
$taxa_boleto = 3.00;

// Dados do Sacado
$boleto['sacado_nome'] = $_SESSION['nome_cli'];
$boleto['sacado_end1'] = ltrim($_SESSION['end_nome']) . ", " . ltrim($_SESSION['end_num']) . " " . ltrim($_SESSION['end_comp']); 
$boleto['sacado_end2'] = substr($_SESSION['cep'],0,5)."-" . substr($_SESSION['cep'],5,3) . "    " . ltrim($_SESSION['bairro']) . "    " . ltrim($_SESSION['cidade']) . "    " . ltrim($_SESSION['uf']);

// *************** CÓDIGO DE BARRAS
// Monta cógigo de barras sem o dígito verificador
$boleto['codbarra_sem_dv'] = $boleto['num_banco'] . $boleto['moeda'] . $boleto['fator'] . $boleto['valor_zeroesq'] . $boleto['num_agencia'] . $boleto['carteira'] . $boleto['nosso_numero'] . $boleto['num_conta'] . $boleto['fixo'];

// Cálculo do dígito verificador (dv) do código de barras
// Inverte o código de barras para cálculo do dígito verificador
$boleto1 = strrev($boleto['codbarra_sem_dv']);
$soma = 0;
for($i=0; $i <= 42; $i++) {
	$a[$i] = substr($boleto1,$i,1);
	// Multiplica as posições de 0 a 7 por 2,3,4,5,6,7,8 e 9
	if ($i <= 7) {
		$fator[$i] = $a[$i] * ($i + 2);
	}
	// Multiplica as posições de 8 a 15 por 2,3,4,5,6,7,8 e 9
	if ($i >= 8 and $i <= 15) {
		$fator[$i] = $a[$i] * ($i - 6);
	}
	// Multiplica as posições de 16 a 23 por 2,3,4,5,6,7,8 e 9
	if ($i >= 16 and $i <= 23) {
		$fator[$i] = $a[$i] * ($i - 14);
	}
	// Multiplica as posições de 24 a 31 por 2,3,4,5,6,7,8 e 9
	if ($i >= 24 and $i <= 31) {
		$fator[$i] = $a[$i] * ($i - 22);
	}
	// Multiplica as posições de 42 a 39 por 2,3,4,5,6,7,8 e 9
	if ($i >= 32 and $i <= 39) {
		$fator[$i] = $a[$i] * ($i - 30);
	}
	// Multiplica as posições de 40 a 42 por 2,3 e 4
	if ($i >= 40) {
		$fator[$i] = $a[$i] * ($i - 38);
	}
	// Soma os números de cada posição do código de barras invertido pelo respectivo fator
	$soma = $soma + $fator[$i];
	// Calcula o resto da divisão entre a soma e 11
	$dv = 11 - ($soma % 11);
	// Se o resultado da subtração (11 - resto de $soma) for igual a 0 (Zero), 1 (um)
	// ou maior que 9 (nove) deverão assumir o dígito igual a 1 (um).
	if ($dv == 0 or $dv == 1 or $dv > 9) {
		$dv = 1;
	}
}
// Monta o código de barras com o dígito verificador (dv)
$boleto['codbarra_dv'] = substr($boleto['codbarra_sem_dv'],0,4) . $dv . substr($boleto['codbarra_sem_dv'],4,39);

// TRANSFORMA O CÓDIGO DE BARRAS NUMÉRICO (base 10) EM BINÁRIO
$n[0] = "00110";
$n[1] = "10001";
$n[2] = "01001";
$n[3] = "11000";
$n[4] = "00101";
$n[5] = "10100";
$n[6] = "01100";
$n[7] = "00011";
$n[8] = "10010";
$n[9] = "01010";

$boleto['codbarra_binario'] = "";
for($z=0; $z < 44; $z = $z+2) {
	for($i=0; $i < 5; $i++) {
		$x1 = substr($boleto['codbarra_dv'],$z,1);
		$x2 = substr($boleto['codbarra_dv'],$z+1,1);
		$boleto['codbarra_binario'] = $boleto['codbarra_binario'] . substr($n[$x1],$i,1) . substr($n[$x2],$i,1);
	}
}

// prepara as barras para impressão
$boleto['cod_grafico'] = "";	// Contém as imagens das barras (preta e branca)
for($i=0; $i < strlen($boleto['codbarra_binario']); $i++) {
	// Verifica se a posição da barra é par
	if ($i % 2 == 0) {
		// Se o número for zero imprime barra preta estreita
		if (substr($boleto['codbarra_binario'],$i,1) == 0) {
			$boleto['cod_grafico'] = $boleto['cod_grafico'] . "<img src='../siteLoja/imagens/p.png' width='1' height='50' border='0' />";
		// Se o número for 1 imprime barra preta larga
		} else {
			$boleto['cod_grafico'] = $boleto['cod_grafico'] . "<img src='../siteLoja/imagens/p.png' width='3' height='50' border='0' />";
		}
	} 
	
	// Verifica se a posição da barra é ímpar
	if ($i % 2 == 1) {	
		// Se o número for zero imprime barra branca estreita	
		if (substr($boleto['codbarra_binario'],$i,1) == 0) {
			$boleto['cod_grafico'] = $boleto['cod_grafico'] . "<img src='../siteLoja/imagens/b.png' width='1' height='50' border='0' />";
		// Se o número for 1 imprime barra branca larga		
		} else {
			$boleto['cod_grafico'] = $boleto['cod_grafico'] . "<img src='../siteLoja/imagens/b.png' width='3' height='50' border='0' />";
		}
	}
}
// Insere ao código de barras as barras start
$bar_start = "<img src='../siteLoja/imagens/p.png' width='1' height='50' />";
$bar_start = $bar_start . "<img src='../siteLoja/imagens/b.png' width='1' height='50' />";
$bar_start = $bar_start . "<img src='../siteLoja/imagens/p.png' width='1' height='50' />";
$bar_start = $bar_start . "<img src='../siteLoja/imagens/b.png' width='1' height='50' />";
$boleto['cod_grafico'] = $bar_start . $boleto['cod_grafico'];

// Insere ao código de barras as barras stop
$bar_stop = "<img src='../siteLoja/imagens/p.png' width='3' height='50' />";
$bar_stop = $bar_stop . "<img src='../siteLoja/imagens/b.png' width='1' height='50' />";
$bar_stop = $bar_stop . "<img src='../siteLoja/imagens/p.png' width='1' height='50' />";
$boleto['cod_grafico'] = $boleto['cod_grafico'] . $bar_stop;


// *************** LINHA DIGITÁVEL
// Campo livre = Agência (cedente) + Carteira + Nosso número + Conta corrente (cedente) + Fixo (0)
$campo_livre = $boleto['num_agencia'] . $boleto["carteira"] . $boleto["nosso_numero"] . $boleto["num_conta"] . $boleto["fixo"];

// 1º campo
// Composto pelo código de Banco, código da moeda, as cinco primeiras posições do campo livre e o dígito de auto conferência(DAC) deste campo
$campo1 = $boleto['num_banco'] . $boleto['moeda'] . substr($campo_livre,0,5);
$dac_campo1 = calculo_dac1($campo1);

// 2º campo
// Composto pelas posições 6ª a 15ª do campo livre e o dígito verificador deste campo
$campo2 = substr($campo_livre,5,10);
$dac_campo2 = calculo_dac2($campo2);

// 3º campo
// Composto pelas posições 16ª a 25ª do campo livre e o dígito verificador deste campo deste campo
$campo3 = substr($campo_livre,15,10);
$dac_campo3 = calculo_dac2($campo3);

// 4º campo
// Composto pelo dígito verificador do código de barras, ou seja, a 5ª posição do código de barras
$campo4 = $dv;

// 5º campo
// Composto pelo fator de vencimento com 4(quatro) caracteres e o valor do documento com 10(dez) caracteres, sem separadores e sem edição
$campo5 = fator_venc($_SESSION['datavenc']) . zero_esquerda($_SESSION['valor_boleto1'],10);

// LINHA DIGITÁVEL
$linha_digitavel = substr($campo1,0,5) . "." . substr($campo1,5,5) . $dac_campo1 . " ";
$linha_digitavel = $linha_digitavel . substr($campo2,0,5) . "." . substr($campo2,5,5) . $dac_campo2 . " ";
$linha_digitavel = $linha_digitavel . substr($campo3,0,5) . "." . substr($campo3,5,5) . $dac_campo3 . " ";
$linha_digitavel = $linha_digitavel . $campo4 . " " . $campo5;

// *************** FUNÇÕES
// CALCULO DO FATOR DE VENCIMENTO DO BOLETO
// Parâmetro: $data = Data de vencimento do boleto no formato aaaa-mm-dd
function fator_venc($data) {
	// Separa a data em dia, mês e ano
	$dia = substr($data,8,2);
	$mes = substr($data,5,2);
	$ano = substr($data,0,4);
	// calcula o timestamp da data 07/10/1997 (base de cálculo do fator de vencimento)
	$timestamp_data1 = mktime(0,0,0,10,07,1997);
	// calcula o timestamp da data de vencimento do boleto
	$timestamp_data2 = mktime(0,0,0,$mes,$dia,$ano);
	// Calcula a diferença de dias entre as duas datas. Como esta diferença é calculada em segundos, 
	// é necessário se dividir esse resultado por 86.400 (número de segundos de 1 dia)
	$dif_dias = round(($timestamp_data2 - $timestamp_data1) / 86400);
return $dif_dias;
}

// INSERE ZEROS À ESQUERDA DE UM NÚMERO
// Parâmetros: $numero = número considerado, $zeros = tamanho do número (com zeros)
function zero_esquerda($numero,$zeros) {	
	// Retira o ponto decimal do número	
	$numero = str_replace(".","",$numero);
	// Define o número de zeros a serem inseridos à esquerda do número
	$loop = $zeros - strlen($numero);				
	for($i=0; $i < $loop; $i++) {
		$numero = "0" . $numero;
	}
return $numero;
}

// Função formatar CNPJ
function formatar_cnpj($n) {
$cnpj_formatado = substr($n,0,2).".".substr($n,2,3).".".substr($n,5,3)."/".substr($n,8,4)."-".substr($n,12,2);
return $cnpj_formatado;
}

// Cálculo do Dígito de auto conferência (DAC) da linha digitável para o campo 1
function calculo_dac1($campo) {
for($i=0; $i < 9; $i++) {
	// Varifica a posição do número. Se impar $fator_dac = 2. Se par $fator_dac = 1
	if ($i % 2 == 0) {
		$fator_dac = 2;
	} else {
		$fator_dac = 1;
	}
	// Multiplica a posição do número pelo $fator_dac
	$dac1 = (substr($campo,$i,1) * $fator_dac);
	// Se o valor de $dac1 for maior do que 9, somam-se os dois dígitos, ex:
	// Se $dac1 = 12 teremos como resultado final 1 + 2, ou seja 3.
	if ($dac1 > 9) {
		$dac2 = substr($dac1,0,1) + substr($dac1,1,1);
	} else {
		$dac2 = $dac1;
	}
	
    //Declarando Variável
    $soma_dac = 0;
	
	$soma_dac = $soma_dac + $dac2;
	// Divide-se o resultado por 10, se resto = 0 o DAC será 0
	// Se resto diferente de 0 o DAC será: 10 - resto
	if ($soma_dac % 10 == 0) {
		$dac = 0;
	} else {
		$dac = 10 - ($soma_dac % 10);
	}
}
return $dac;
}	

// Cálculo do Dígito de auto conferência (DAC) da linha digitável para o campo 2 e 3
function calculo_dac2($campo) {
for($i=0; $i < 10; $i++) {
	// Varifica a posição do número. Se impar $fator_dac = 2. Se par $fator_dac = 1
	if ($i % 2 == 0) {
		$fator_dac = 1;
	} else {
		$fator_dac = 2;
	}
	// Multiplica a posição do número pelo $fator_dac
	$dac1 = (substr($campo,$i,1) * $fator_dac);
	// Se o valor de $dac1 for maior do que 9, somam-se os dois dígitos, ex:
	// Se $dac1 = 12 teremos como resultado final 1 + 2, ou seja 3.
	if ($dac1 > 9) {
		$dac2 = substr($dac1,0,1) + substr($dac1,1,1);
	} else {
		$dac2 = $dac1;
	}
	
	//Declarando Variável
    $soma_dac = 0;

	$soma_dac = $soma_dac + $dac2;
	// Divide-se o resultado por 10, se resto = 0 o DAC será 0
	// Se resto diferente de 0 o DAC será: 10 - resto
	if ($soma_dac % 10 == 0) {
		$dac = 0;
	} else {
		$dac = 10 - ($soma_dac % 10);
	}
}
return $dac;
}	
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Faça um Site - Boleto Bancário</title>
<style type="text/css">
<!--
.linha_inf {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	font-weight: bold;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 2px;
	padding-left: 10px;
}
.linha_dir {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	border-right-width: 1px;
	border-right-style: solid;
	border-right-color: #000000;
	font-weight: bold;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 2px;
	padding-left: 10px;
}
.titulo_inf {
	font-size: 8px;
	line-height: 10px;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 0px;
	padding-left: 2px;
}
.titulo_dir {
	border-right-width: 1px;
	border-right-style: solid;
	border-right-color: #000000;
	font-size: 8px;
	line-height: 10px;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 0px;
	padding-left: 2px;
}
.logo_banco {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	border-right-width: 1px;
	border-right-style: solid;
	border-right-color: #000000;
	font-weight: bold;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 2px;
	padding-left: 0px;
}
.logo_fs {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	font-weight: bold;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 2px;
	padding-left: 0px;
}
.num_banco {
	padding: 2px;
	font-size: 18px;
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	border-right-width: 1px;
	border-right-style: solid;
	border-right-color: #000000;
	text-align: center;
}
body {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #000000;
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
}
.linha_digitavel {
	padding: 2px;
	font-size: 16px;
	font-weight: normal;
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	text-align: right;
}
.valor {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	font-weight: bold;
	padding-top: 0px;
	padding-right: 15px;
	padding-bottom: 2px;
	padding-left: 10px;
	text-align: right;
}
.sacado {
	font-weight: bold;
	padding-top: 3px;
	padding-right: 15px;
	padding-bottom: 3px;
	padding-left: 30px;
}
.avalista {
	font-size: 8px;
	line-height: 10px;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 0px;
	padding-left: 2px;
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
}
.autenticacao {
	font-size: 9px;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 0px;
	padding-left: 2px;
}
.instrucoes {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 2px;
	padding-left: 10px;
}
p {
	padding-top: 1px;
	padding-right: 0px;
	padding-bottom: 1px;
	padding-left: 0px;
	margin: 0px;
}
.linha_digitavelA {
	padding: 2px;
	font-size: 20px;
	font-weight: normal;
}
.titulo {
	padding: 2px;
	font-size: 14px;
	font-weight: normal;
	text-align: right;
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
}
-->
</style>
</head>
<body onload="javascript:window.print();">
<!-- Menu de emissão do boleto -->
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
	<td height="28" valign="top" background="../siteLoja/imagens/menu_boleto.gif"><div align="right">
		<a href="javascript:window.print();"><img src="../siteLoja/imagens/btn_transparente.gif" width="85" height="23" hspace="3" border="0" /></a>
		<a href="index.php"><img src="../siteLoja/imagens/btn_transparente.gif" width="80" height="23" hspace="3" border="0" /></a>		
		<a href="pedidos.php"><img src="../siteLoja/imagens/btn_transparente.gif" alt="Ver meus pedidos" width="100" height="23" hspace="3" border="0" /></a>
		<a href="encerrar.php"><img src="../siteLoja/imagens/btn_transparente.gif" alt="Encerrar seção" width="71" height="23" hspace="3" border="0" /></a>		
	</div></td>
</tr>
</table>

<!-- Recibo do Sacado -->
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td class="logo_fs"><a href="index.php"><img src="../siteLoja/imagens/logo_fsboleto.gif" width="178" height="37" vspace="2" border="0" /></a></td>
    <td width="439" class="titulo">Boleto para pagamento do pedido nº<strong> <?PHP print $_SESSION['num_ped']; ?></strong></td>
  </tr>
</table>

<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td colspan="5" class="titulo_dir">Local de Pagamento</td>
    <td width="146" class="titulo_inf">Vencimento</td>
  </tr>
  <tr>
    <td colspan="5" class="linha_dir">PAGAVEL PREFERENCIALMENTE EM QUALQUER AGÊNCIA BANCO TESTE</td>
    <td class="linha_inf"><?PHP print substr($_SESSION['datavenc'],8,2) . "/" . substr($_SESSION['datavenc'],5,2) . "/" . substr($_SESSION['datavenc'],0,4); ?></td>	
  </tr>
  <tr>
    <td colspan="5" class="titulo_dir">Cedente</td>
    <td class="titulo_inf">Agência/Código Cedente</td>
  </tr>
  <tr>
    <td colspan="5" class="linha_dir"><?PHP print strtoupper($boleto["cedente_nome"]); ?></td>
    <td class="linha_inf"><?PHP print $boleto["num_agencia"] . "-" . $boleto["dv_agencia"] . "/" . $boleto["num_conta"] . "-" . $boleto["dv_conta"]; ?></td>
  </tr>
  <tr>
    <td width="109" class="titulo_dir">Data do Documento </td>
    <td width="129" class="titulo_dir">Nº do Documento </td>
    <td width="113" class="titulo_dir">Espécie Documento </td>
    <td width="84" class="titulo_dir">Aceite</td>
    <td width="119" class="titulo_dir">Data do Processamento</td>
    <td class="titulo_inf">Nosso Número</td>
  </tr>
  <tr>
    <td class="linha_dir"><?PHP print substr($_SESSION['dataped'],8,2) . "/" . substr($_SESSION['dataped'],5,2) . "/" . substr($_SESSION['dataped'],0,4); ?></td>
    <td class="linha_dir"><?PHP print $_SESSION['num_ped']; ?></td>
    <td class="linha_dir"><?PHP print $boleto["especie_doc"]; ?></td>
    <td class="linha_dir"><?PHP print $boleto["aceite"]; ?></td>
    <td class="linha_dir"><?PHP print date('d/m/Y'); ?></td>
    <td class="linha_inf"><?PHP print $boleto['carteira'] . "-" . $boleto['nosso_numero']; ?></td>
  </tr>
  <tr>
    <td class="titulo_dir">Uso do Banco </td>
    <td class="titulo_dir">Carteira</td>
    <td class="titulo_dir">Espécie</td>
    <td class="titulo_dir">Quantidade</td>
    <td class="titulo_dir">Valor</td>
    <td class="titulo_inf">(=) Valor do Documento </td>
  </tr>
  <tr>
    <td class="linha_dir"> </td>
    <td class="linha_dir"><?PHP print $boleto['carteira']; ?></td>
    <td class="linha_dir"><?PHP print $boleto['especie']; ?></td>
    <td class="linha_dir"> </td>
    <td class="linha_dir"> </td>
    <td class="valor"><?PHP print number_format($_SESSION['valor_boleto'],2,',','.'); ?></td>
  </tr>
  <tr>
    <td colspan="5" class="titulo_inf"> </td>
    <td class="titulo_inf"> </td>
  </tr>
  <tr>
    <td colspan="6" valign="top" class="instrucoes">
		<p><strong>Instruções de impressão</strong></p>
		<p>- Imprima em impressora jato de tinta (ink jet) ou laser em qualidade normal ou alta (Não use modo econômico).</p>
		<p>- Utilize folha A4 (210 x 297 mm) ou Carta (216 x 279 mm) e margens mínimas à esquerda e à direita do formulário.</p>
		<p>- Corte na linha indicada. Não rasure, risque, fure ou dobre a região onde se encontra o código de barras.</p>
		<p> </p>
		<p><strong>Pagamento via Internet Banking</strong></p>
		<p>Caso tenha problemas ao imprimir este boleto, ou se desejar pagá-lo através do Internet Banking, utilize a linha digitável descrita abaixo:</p>
		<p> </p>
		<p align="center" class="linha_digitavelA"><?PHP print $linha_digitavel; ?></p>
		<p> </p>	
		</td>
  </tr>
  
  <tr>
    <td colspan="6" class="titulo_inf">Sacado</td>
  </tr>
  <tr>
    <td colspan="6" class="sacado">
		<?PHP print $boleto['sacado_nome']; ?><br />
		<?PHP print $boleto['sacado_end1']; ?><br />
		<?PHP print $boleto['sacado_end2']; ?></td>
  </tr>
  <tr>
    <td colspan="6" class="avalista">Sacador/Avalista</td>
  </tr>
  <tr>
    <td colspan="6"><div align="right"><strong>Recibo do Sacado  -</strong> <span class="autenticacao">Autenticação Mecânica</span> </div></td>
  </tr>
	
  <tr>
    <td colspan="6"> </td>
  </tr>		
  <tr>
    <td colspan="6"> </td>
  </tr>	
  <tr>
    <td colspan="6"> </td>
  </tr>	
  <tr>
    <td colspan="6"><img src="../siteLoja/imagens/corte.gif" width="700" height="12" /></td>
  </tr>	
  <tr>
    <td colspan="6"> </td>
  </tr>	
  <tr>
    <td colspan="6"> </td>
  </tr>						
</table>

<!-- Ficha de Compensação -->
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="157" class="logo_banco"><img src="../siteLoja/imagens/logo_banco.gif" width="140" height="23" /></td>
    <td width="51" class="num_banco"><?PHP print $boleto['num_banco'] . "-" . $boleto['dv_banco']; ?></td>
    <td width="492" class="linha_digitavel"><?PHP print $linha_digitavel; ?></td>
  </tr>
</table>

<!-- Ficha de compensação -->
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td colspan="5" class="titulo_dir">Local de Pagamento</td>
    <td width="146" class="titulo_inf">Vencimento</td>
  </tr>
  <tr>
    <td colspan="5" class="linha_dir">PAGAVEL PREFERENCIALMENTE EM QUALQUER AGÊNCIA BANCO TESTE</td>
    <td class="linha_inf"><?PHP print substr($_SESSION['datavenc'],8,2) . "/" . substr($_SESSION['datavenc'],5,2) . "/" . substr($_SESSION['datavenc'],0,4); ?></td>
  </tr>
  <tr>
    <td colspan="5" class="titulo_dir">Cedente</td>
    <td class="titulo_inf">Agência/Código Cedente</td>
  </tr>
  <tr>
    <td colspan="5" class="linha_dir"><?PHP print strtoupper($boleto["cedente_nome"]); ?></td>
    <td class="linha_inf"><?PHP print $boleto["num_agencia"] . "-" . $boleto["dv_agencia"] . "/" . $boleto["num_conta"] . "-" . $boleto["dv_conta"]; ?></td>
  </tr>
  <tr>
    <td width="109" class="titulo_dir">Data do Documento </td>
    <td width="129" class="titulo_dir">Nº do Documento </td>
    <td width="113" class="titulo_dir">Espécie Documento </td>
    <td width="84" class="titulo_dir">Aceite</td>
    <td width="119" class="titulo_dir">Data do Processamento</td>
    <td class="titulo_inf">Nosso Número</td>
  </tr>
  <tr>
    <td class="linha_dir"><?PHP print substr($_SESSION['dataped'],8,2) . "/" . substr($_SESSION['dataped'],5,2) . "/" . substr($_SESSION['dataped'],0,4); ?></td>
    <td class="linha_dir"><?PHP print $_SESSION['num_ped']; ?></td>
    <td class="linha_dir"><?PHP print $boleto["especie_doc"]; ?></td>
    <td class="linha_dir"><?PHP print $boleto["aceite"]; ?></td>
    <td class="linha_dir"><?PHP print date('d/m/Y'); ?></td>
    <td class="linha_inf"><?PHP print $boleto['carteira'] . "-" . $boleto['nosso_numero']; ?></td>
  </tr>
  <tr>
    <td class="titulo_dir">Uso do Banco </td>
    <td class="titulo_dir">Carteira</td>
    <td class="titulo_dir">Espécie</td>
    <td class="titulo_dir">Quantidade</td>
    <td class="titulo_dir">Valor</td>
    <td class="titulo_inf">(=) Valor do Documento </td>
  </tr>
  <tr>
    <td class="linha_dir"> </td>
    <td class="linha_dir"><?PHP print $boleto['carteira']; ?></td>
    <td class="linha_dir"><?PHP print $boleto['especie']; ?></td>
    <td class="linha_dir"> </td>
    <td class="linha_dir"> </td>
    <td class="valor"><?PHP print number_format($_SESSION['valor_boleto'],2,',','.'); ?></td>
  </tr>
  <tr>
    <td colspan="5" class="titulo_dir">INSTRUÇÕES (Texto de responsabilidade do Cedente) </td>
    <td class="titulo_inf">(-) Desconto/Abatimento </td>
  </tr>
  <tr>
    <td colspan="5" rowspan="9" valign="top" class="linha_dir">
		<p> </p>
		<p>ATENÇÂO:</p>
		<p>- Não pague este boleto após o seu vencimento.</p>
		<p>- Após esta data o pedido será cancelado e o boleto perderá a validade.
		<p> </p>
		<p>BOLETO PARA FINS DIDÁTICOS   *** NUNCA EFETUE SEU PAGAMENTO ***</p>
		</td>
    <td class="linha_inf"> </td>
  </tr>
  <tr>
    <td class="titulo_inf">(-) Outras Deduções </td>
  </tr>
  <tr>
    <td class="linha_inf"> </td>
  </tr>
  <tr>
    <td class="titulo_inf">(+) Mora/Multa </td>
  </tr>
  <tr>
    <td class="linha_inf"> </td>
  </tr>
  <tr>
    <td class="titulo_inf">(+) Outros Acréscimos </td>
  </tr>
  <tr>
    <td class="linha_inf"> </td>
  </tr>
  <tr>
    <td class="titulo_inf">(=) Valor Cobrado </td>
  </tr>
  <tr>
    <td class="linha_inf"> </td>
  </tr>
  <tr>
    <td colspan="6" class="titulo_inf">Sacado</td>
  </tr>
  <tr>
    <td colspan="6" class="sacado">
		<?PHP print $boleto['sacado_nome']; ?><br />
		<?PHP print $boleto['sacado_end1']; ?><br />
		<?PHP print $boleto['sacado_end2']; ?></td>
  </tr>
  <tr>
    <td colspan="5" class="avalista">Sacador/Avalista</td>
    <td class="avalista"><div align="right">Código de Baixa </div></td>
  </tr>
  <tr>
    <td colspan="6"><div align="right"><strong>Ficha de Compensação -</strong> <span class="autenticacao">Autenticação Mecânica</span> </div></td>
  </tr>
	
  <tr>
    <td colspan="6"><?PHP print $boleto['cod_grafico']; ?></td>
  </tr>		
</table>
</body>
</html>
<?PHP
// Destroi variáveis de seção
session_destroy();

// Libera os recursos usados pela conexão atual
mysql_free_result($rs);
mysql_close ($conexao);
?>

 

Espero ter ajudado no seu problema.

 

Cesar

Share this post


Link to post
Share on other sites
Em 04/01/2019 at 14:01, violin101 disse:

Caro amigo, rnicson, saudações...

 

Tenho o seguinte código para gerar Boleto Bancário em PHP, na qual tirei de um livro Faça um Site com PHP.

 

Abaixo o código:


<?PHP
// +---------------------------------------------------------+
// | Emissão do boleto bancário                              |
// +---------------------------------------------------------+

 session_start (); 

 include "inc_dbConexao.php";

 //Captura os itens da cesta
 $sql = "SELECT * ";
 $sql = $sql . " FROM pedidos ";
 $sql = $sql . " WHERE num_ped = '" . $_SESSION['num_ped1'] . "' ";
 $rs = mysql_query($sql, $conexao);
 $reg = mysql_fetch_array($rs);

 $_SESSION['id_cli'] = $reg['id_cliente'];
 $_SESSION['dataped'] = $reg['data'];  //data do pedido
 $_SESSION['horaped'] = $reg['hora'];
 $_SESSION['valor'] = $reg['valor'];
 $_SESSION['valor_frete'] = $reg['frete'];
 $_SESSION['peso'] = $reg['peso'];
 $_SESSION['desconto'] = $reg['desconto'];
 $_SESSION['num_ped'] = $reg['num_ped'];
 $_SESSION['id'] = $reg['id'];
 $_SESSION['datavenc'] = $reg['vencimento']; //data de vencimento
 
// Calcula o valor do boleto
$_SESSION['valor_boleto'] = $_SESSION['valor'] + $_SESSION['valor_frete'] - $_SESSION['desconto'];

// Mantém zeros na casa decimal sem formatação para o cálculo da linha digitável
$_SESSION['valor_boleto1'] = number_format($_SESSION['valor_boleto'],2,'','');

// ******** DADOS DO BOLETO
// DADOS FIXOS DE CONFIGURAÇÃO DO BOLETO
// 1. Dados da sua empresa
$boleto["cedente_nome"] = "Faça um Site Miniaturas Ltda";
$boleto["cedente_cnpj"] = "33.333.333/0001-33";

// 2. Dados da conta bancária da empresa (devem ser confirmados com o banco do cedente)
$boleto['num_banco'] = "000";			// Identificação do Banco (Banco teste = 935)
$boleto['dv_banco'] = "6";				// Identificação do Banco (Banco teste = 935)
$boleto['moeda'] = "9";					// Código da Moeda (Real = 9)
$boleto["num_agencia"] = "1111";		// Num da agência - sem digito verificador
$boleto["dv_agencia"] = "8";			// Dígito verificador da agência
$boleto["num_conta"] = "1234567";		// Num da conta corrente sem o dígito verificador
$boleto["dv_conta"] = "8";				// Digito verificador da conta corrente

// 3. Dados restritos do banco (devem ser confirmados com o banco do cedente)
$boleto["carteira"] = "06";		// Código da Carteira: Consultar seu banco
$boleto["aceite"] = "N";		// Aceite: Consultar seu banco
$boleto["especie"] = "R$";		// Espécie: Consultar seu banco
$boleto["especie_doc"] = "99";	// Espécie documento: Consultar seu banco
$boleto["fixo"] = "0";			// posicao 44 do código de barras

// 4. Informações gerais do boleto
$boleto['dv_codbar'] = "";	// Dígito verificador do Código de Barras

$boleto['fator'] = fator_venc($_SESSION['datavenc']);
$boleto['valor_zeroesq'] = zero_esquerda($_SESSION['valor_boleto1'],10);
$boleto['nosso_numero'] = zero_esquerda($_SESSION['id'],11);

// Taxa de cobrança para envio do boleto
$taxa_boleto = 3.00;

// Dados do Sacado
$boleto['sacado_nome'] = $_SESSION['nome_cli'];
$boleto['sacado_end1'] = ltrim($_SESSION['end_nome']) . ", " . ltrim($_SESSION['end_num']) . " " . ltrim($_SESSION['end_comp']); 
$boleto['sacado_end2'] = substr($_SESSION['cep'],0,5)."-" . substr($_SESSION['cep'],5,3) . "    " . ltrim($_SESSION['bairro']) . "    " . ltrim($_SESSION['cidade']) . "    " . ltrim($_SESSION['uf']);

// *************** CÓDIGO DE BARRAS
// Monta cógigo de barras sem o dígito verificador
$boleto['codbarra_sem_dv'] = $boleto['num_banco'] . $boleto['moeda'] . $boleto['fator'] . $boleto['valor_zeroesq'] . $boleto['num_agencia'] . $boleto['carteira'] . $boleto['nosso_numero'] . $boleto['num_conta'] . $boleto['fixo'];

// Cálculo do dígito verificador (dv) do código de barras
// Inverte o código de barras para cálculo do dígito verificador
$boleto1 = strrev($boleto['codbarra_sem_dv']);
$soma = 0;
for($i=0; $i <= 42; $i++) {
	$a[$i] = substr($boleto1,$i,1);
	// Multiplica as posições de 0 a 7 por 2,3,4,5,6,7,8 e 9
	if ($i <= 7) {
		$fator[$i] = $a[$i] * ($i + 2);
	}
	// Multiplica as posições de 8 a 15 por 2,3,4,5,6,7,8 e 9
	if ($i >= 8 and $i <= 15) {
		$fator[$i] = $a[$i] * ($i - 6);
	}
	// Multiplica as posições de 16 a 23 por 2,3,4,5,6,7,8 e 9
	if ($i >= 16 and $i <= 23) {
		$fator[$i] = $a[$i] * ($i - 14);
	}
	// Multiplica as posições de 24 a 31 por 2,3,4,5,6,7,8 e 9
	if ($i >= 24 and $i <= 31) {
		$fator[$i] = $a[$i] * ($i - 22);
	}
	// Multiplica as posições de 42 a 39 por 2,3,4,5,6,7,8 e 9
	if ($i >= 32 and $i <= 39) {
		$fator[$i] = $a[$i] * ($i - 30);
	}
	// Multiplica as posições de 40 a 42 por 2,3 e 4
	if ($i >= 40) {
		$fator[$i] = $a[$i] * ($i - 38);
	}
	// Soma os números de cada posição do código de barras invertido pelo respectivo fator
	$soma = $soma + $fator[$i];
	// Calcula o resto da divisão entre a soma e 11
	$dv = 11 - ($soma % 11);
	// Se o resultado da subtração (11 - resto de $soma) for igual a 0 (Zero), 1 (um)
	// ou maior que 9 (nove) deverão assumir o dígito igual a 1 (um).
	if ($dv == 0 or $dv == 1 or $dv > 9) {
		$dv = 1;
	}
}
// Monta o código de barras com o dígito verificador (dv)
$boleto['codbarra_dv'] = substr($boleto['codbarra_sem_dv'],0,4) . $dv . substr($boleto['codbarra_sem_dv'],4,39);

// TRANSFORMA O CÓDIGO DE BARRAS NUMÉRICO (base 10) EM BINÁRIO
$n[0] = "00110";
$n[1] = "10001";
$n[2] = "01001";
$n[3] = "11000";
$n[4] = "00101";
$n[5] = "10100";
$n[6] = "01100";
$n[7] = "00011";
$n[8] = "10010";
$n[9] = "01010";

$boleto['codbarra_binario'] = "";
for($z=0; $z < 44; $z = $z+2) {
	for($i=0; $i < 5; $i++) {
		$x1 = substr($boleto['codbarra_dv'],$z,1);
		$x2 = substr($boleto['codbarra_dv'],$z+1,1);
		$boleto['codbarra_binario'] = $boleto['codbarra_binario'] . substr($n[$x1],$i,1) . substr($n[$x2],$i,1);
	}
}

// prepara as barras para impressão
$boleto['cod_grafico'] = "";	// Contém as imagens das barras (preta e branca)
for($i=0; $i < strlen($boleto['codbarra_binario']); $i++) {
	// Verifica se a posição da barra é par
	if ($i % 2 == 0) {
		// Se o número for zero imprime barra preta estreita
		if (substr($boleto['codbarra_binario'],$i,1) == 0) {
			$boleto['cod_grafico'] = $boleto['cod_grafico'] . "<img src='../siteLoja/imagens/p.png' width='1' height='50' border='0' />";
		// Se o número for 1 imprime barra preta larga
		} else {
			$boleto['cod_grafico'] = $boleto['cod_grafico'] . "<img src='../siteLoja/imagens/p.png' width='3' height='50' border='0' />";
		}
	} 
	
	// Verifica se a posição da barra é ímpar
	if ($i % 2 == 1) {	
		// Se o número for zero imprime barra branca estreita	
		if (substr($boleto['codbarra_binario'],$i,1) == 0) {
			$boleto['cod_grafico'] = $boleto['cod_grafico'] . "<img src='../siteLoja/imagens/b.png' width='1' height='50' border='0' />";
		// Se o número for 1 imprime barra branca larga		
		} else {
			$boleto['cod_grafico'] = $boleto['cod_grafico'] . "<img src='../siteLoja/imagens/b.png' width='3' height='50' border='0' />";
		}
	}
}
// Insere ao código de barras as barras start
$bar_start = "<img src='../siteLoja/imagens/p.png' width='1' height='50' />";
$bar_start = $bar_start . "<img src='../siteLoja/imagens/b.png' width='1' height='50' />";
$bar_start = $bar_start . "<img src='../siteLoja/imagens/p.png' width='1' height='50' />";
$bar_start = $bar_start . "<img src='../siteLoja/imagens/b.png' width='1' height='50' />";
$boleto['cod_grafico'] = $bar_start . $boleto['cod_grafico'];

// Insere ao código de barras as barras stop
$bar_stop = "<img src='../siteLoja/imagens/p.png' width='3' height='50' />";
$bar_stop = $bar_stop . "<img src='../siteLoja/imagens/b.png' width='1' height='50' />";
$bar_stop = $bar_stop . "<img src='../siteLoja/imagens/p.png' width='1' height='50' />";
$boleto['cod_grafico'] = $boleto['cod_grafico'] . $bar_stop;


// *************** LINHA DIGITÁVEL
// Campo livre = Agência (cedente) + Carteira + Nosso número + Conta corrente (cedente) + Fixo (0)
$campo_livre = $boleto['num_agencia'] . $boleto["carteira"] . $boleto["nosso_numero"] . $boleto["num_conta"] . $boleto["fixo"];

// 1º campo
// Composto pelo código de Banco, código da moeda, as cinco primeiras posições do campo livre e o dígito de auto conferência(DAC) deste campo
$campo1 = $boleto['num_banco'] . $boleto['moeda'] . substr($campo_livre,0,5);
$dac_campo1 = calculo_dac1($campo1);

// 2º campo
// Composto pelas posições 6ª a 15ª do campo livre e o dígito verificador deste campo
$campo2 = substr($campo_livre,5,10);
$dac_campo2 = calculo_dac2($campo2);

// 3º campo
// Composto pelas posições 16ª a 25ª do campo livre e o dígito verificador deste campo deste campo
$campo3 = substr($campo_livre,15,10);
$dac_campo3 = calculo_dac2($campo3);

// 4º campo
// Composto pelo dígito verificador do código de barras, ou seja, a 5ª posição do código de barras
$campo4 = $dv;

// 5º campo
// Composto pelo fator de vencimento com 4(quatro) caracteres e o valor do documento com 10(dez) caracteres, sem separadores e sem edição
$campo5 = fator_venc($_SESSION['datavenc']) . zero_esquerda($_SESSION['valor_boleto1'],10);

// LINHA DIGITÁVEL
$linha_digitavel = substr($campo1,0,5) . "." . substr($campo1,5,5) . $dac_campo1 . " ";
$linha_digitavel = $linha_digitavel . substr($campo2,0,5) . "." . substr($campo2,5,5) . $dac_campo2 . " ";
$linha_digitavel = $linha_digitavel . substr($campo3,0,5) . "." . substr($campo3,5,5) . $dac_campo3 . " ";
$linha_digitavel = $linha_digitavel . $campo4 . " " . $campo5;

// *************** FUNÇÕES
// CALCULO DO FATOR DE VENCIMENTO DO BOLETO
// Parâmetro: $data = Data de vencimento do boleto no formato aaaa-mm-dd
function fator_venc($data) {
	// Separa a data em dia, mês e ano
	$dia = substr($data,8,2);
	$mes = substr($data,5,2);
	$ano = substr($data,0,4);
	// calcula o timestamp da data 07/10/1997 (base de cálculo do fator de vencimento)
	$timestamp_data1 = mktime(0,0,0,10,07,1997);
	// calcula o timestamp da data de vencimento do boleto
	$timestamp_data2 = mktime(0,0,0,$mes,$dia,$ano);
	// Calcula a diferença de dias entre as duas datas. Como esta diferença é calculada em segundos, 
	// é necessário se dividir esse resultado por 86.400 (número de segundos de 1 dia)
	$dif_dias = round(($timestamp_data2 - $timestamp_data1) / 86400);
return $dif_dias;
}

// INSERE ZEROS À ESQUERDA DE UM NÚMERO
// Parâmetros: $numero = número considerado, $zeros = tamanho do número (com zeros)
function zero_esquerda($numero,$zeros) {	
	// Retira o ponto decimal do número	
	$numero = str_replace(".","",$numero);
	// Define o número de zeros a serem inseridos à esquerda do número
	$loop = $zeros - strlen($numero);				
	for($i=0; $i < $loop; $i++) {
		$numero = "0" . $numero;
	}
return $numero;
}

// Função formatar CNPJ
function formatar_cnpj($n) {
$cnpj_formatado = substr($n,0,2).".".substr($n,2,3).".".substr($n,5,3)."/".substr($n,8,4)."-".substr($n,12,2);
return $cnpj_formatado;
}

// Cálculo do Dígito de auto conferência (DAC) da linha digitável para o campo 1
function calculo_dac1($campo) {
for($i=0; $i < 9; $i++) {
	// Varifica a posição do número. Se impar $fator_dac = 2. Se par $fator_dac = 1
	if ($i % 2 == 0) {
		$fator_dac = 2;
	} else {
		$fator_dac = 1;
	}
	// Multiplica a posição do número pelo $fator_dac
	$dac1 = (substr($campo,$i,1) * $fator_dac);
	// Se o valor de $dac1 for maior do que 9, somam-se os dois dígitos, ex:
	// Se $dac1 = 12 teremos como resultado final 1 + 2, ou seja 3.
	if ($dac1 > 9) {
		$dac2 = substr($dac1,0,1) + substr($dac1,1,1);
	} else {
		$dac2 = $dac1;
	}
	
    //Declarando Variável
    $soma_dac = 0;
	
	$soma_dac = $soma_dac + $dac2;
	// Divide-se o resultado por 10, se resto = 0 o DAC será 0
	// Se resto diferente de 0 o DAC será: 10 - resto
	if ($soma_dac % 10 == 0) {
		$dac = 0;
	} else {
		$dac = 10 - ($soma_dac % 10);
	}
}
return $dac;
}	

// Cálculo do Dígito de auto conferência (DAC) da linha digitável para o campo 2 e 3
function calculo_dac2($campo) {
for($i=0; $i < 10; $i++) {
	// Varifica a posição do número. Se impar $fator_dac = 2. Se par $fator_dac = 1
	if ($i % 2 == 0) {
		$fator_dac = 1;
	} else {
		$fator_dac = 2;
	}
	// Multiplica a posição do número pelo $fator_dac
	$dac1 = (substr($campo,$i,1) * $fator_dac);
	// Se o valor de $dac1 for maior do que 9, somam-se os dois dígitos, ex:
	// Se $dac1 = 12 teremos como resultado final 1 + 2, ou seja 3.
	if ($dac1 > 9) {
		$dac2 = substr($dac1,0,1) + substr($dac1,1,1);
	} else {
		$dac2 = $dac1;
	}
	
	//Declarando Variável
    $soma_dac = 0;

	$soma_dac = $soma_dac + $dac2;
	// Divide-se o resultado por 10, se resto = 0 o DAC será 0
	// Se resto diferente de 0 o DAC será: 10 - resto
	if ($soma_dac % 10 == 0) {
		$dac = 0;
	} else {
		$dac = 10 - ($soma_dac % 10);
	}
}
return $dac;
}	
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Faça um Site - Boleto Bancário</title>
<style type="text/css">
<!--
.linha_inf {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	font-weight: bold;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 2px;
	padding-left: 10px;
}
.linha_dir {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	border-right-width: 1px;
	border-right-style: solid;
	border-right-color: #000000;
	font-weight: bold;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 2px;
	padding-left: 10px;
}
.titulo_inf {
	font-size: 8px;
	line-height: 10px;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 0px;
	padding-left: 2px;
}
.titulo_dir {
	border-right-width: 1px;
	border-right-style: solid;
	border-right-color: #000000;
	font-size: 8px;
	line-height: 10px;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 0px;
	padding-left: 2px;
}
.logo_banco {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	border-right-width: 1px;
	border-right-style: solid;
	border-right-color: #000000;
	font-weight: bold;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 2px;
	padding-left: 0px;
}
.logo_fs {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	font-weight: bold;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 2px;
	padding-left: 0px;
}
.num_banco {
	padding: 2px;
	font-size: 18px;
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	border-right-width: 1px;
	border-right-style: solid;
	border-right-color: #000000;
	text-align: center;
}
body {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #000000;
	margin-left: 0px;
	margin-top: 0px;
	margin-right: 0px;
	margin-bottom: 0px;
}
.linha_digitavel {
	padding: 2px;
	font-size: 16px;
	font-weight: normal;
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	text-align: right;
}
.valor {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	font-weight: bold;
	padding-top: 0px;
	padding-right: 15px;
	padding-bottom: 2px;
	padding-left: 10px;
	text-align: right;
}
.sacado {
	font-weight: bold;
	padding-top: 3px;
	padding-right: 15px;
	padding-bottom: 3px;
	padding-left: 30px;
}
.avalista {
	font-size: 8px;
	line-height: 10px;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 0px;
	padding-left: 2px;
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
}
.autenticacao {
	font-size: 9px;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 0px;
	padding-left: 2px;
}
.instrucoes {
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
	padding-top: 0px;
	padding-right: 2px;
	padding-bottom: 2px;
	padding-left: 10px;
}
p {
	padding-top: 1px;
	padding-right: 0px;
	padding-bottom: 1px;
	padding-left: 0px;
	margin: 0px;
}
.linha_digitavelA {
	padding: 2px;
	font-size: 20px;
	font-weight: normal;
}
.titulo {
	padding: 2px;
	font-size: 14px;
	font-weight: normal;
	text-align: right;
	border-bottom-width: 1px;
	border-bottom-style: solid;
	border-bottom-color: #000000;
}
-->
</style>
</head>
<body onload="javascript:window.print();">
<!-- Menu de emissão do boleto -->
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
	<td height="28" valign="top" background="../siteLoja/imagens/menu_boleto.gif"><div align="right">
		<a href="javascript:window.print();"><img src="../siteLoja/imagens/btn_transparente.gif" width="85" height="23" hspace="3" border="0" /></a>
		<a href="index.php"><img src="../siteLoja/imagens/btn_transparente.gif" width="80" height="23" hspace="3" border="0" /></a>		
		<a href="pedidos.php"><img src="../siteLoja/imagens/btn_transparente.gif" alt="Ver meus pedidos" width="100" height="23" hspace="3" border="0" /></a>
		<a href="encerrar.php"><img src="../siteLoja/imagens/btn_transparente.gif" alt="Encerrar seção" width="71" height="23" hspace="3" border="0" /></a>		
	</div></td>
</tr>
</table>

<!-- Recibo do Sacado -->
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td class="logo_fs"><a href="index.php"><img src="../siteLoja/imagens/logo_fsboleto.gif" width="178" height="37" vspace="2" border="0" /></a></td>
    <td width="439" class="titulo">Boleto para pagamento do pedido nº<strong> <?PHP print $_SESSION['num_ped']; ?></strong></td>
  </tr>
</table>

<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td colspan="5" class="titulo_dir">Local de Pagamento</td>
    <td width="146" class="titulo_inf">Vencimento</td>
  </tr>
  <tr>
    <td colspan="5" class="linha_dir">PAGAVEL PREFERENCIALMENTE EM QUALQUER AGÊNCIA BANCO TESTE</td>
    <td class="linha_inf"><?PHP print substr($_SESSION['datavenc'],8,2) . "/" . substr($_SESSION['datavenc'],5,2) . "/" . substr($_SESSION['datavenc'],0,4); ?></td>	
  </tr>
  <tr>
    <td colspan="5" class="titulo_dir">Cedente</td>
    <td class="titulo_inf">Agência/Código Cedente</td>
  </tr>
  <tr>
    <td colspan="5" class="linha_dir"><?PHP print strtoupper($boleto["cedente_nome"]); ?></td>
    <td class="linha_inf"><?PHP print $boleto["num_agencia"] . "-" . $boleto["dv_agencia"] . "/" . $boleto["num_conta"] . "-" . $boleto["dv_conta"]; ?></td>
  </tr>
  <tr>
    <td width="109" class="titulo_dir">Data do Documento </td>
    <td width="129" class="titulo_dir">Nº do Documento </td>
    <td width="113" class="titulo_dir">Espécie Documento </td>
    <td width="84" class="titulo_dir">Aceite</td>
    <td width="119" class="titulo_dir">Data do Processamento</td>
    <td class="titulo_inf">Nosso Número</td>
  </tr>
  <tr>
    <td class="linha_dir"><?PHP print substr($_SESSION['dataped'],8,2) . "/" . substr($_SESSION['dataped'],5,2) . "/" . substr($_SESSION['dataped'],0,4); ?></td>
    <td class="linha_dir"><?PHP print $_SESSION['num_ped']; ?></td>
    <td class="linha_dir"><?PHP print $boleto["especie_doc"]; ?></td>
    <td class="linha_dir"><?PHP print $boleto["aceite"]; ?></td>
    <td class="linha_dir"><?PHP print date('d/m/Y'); ?></td>
    <td class="linha_inf"><?PHP print $boleto['carteira'] . "-" . $boleto['nosso_numero']; ?></td>
  </tr>
  <tr>
    <td class="titulo_dir">Uso do Banco </td>
    <td class="titulo_dir">Carteira</td>
    <td class="titulo_dir">Espécie</td>
    <td class="titulo_dir">Quantidade</td>
    <td class="titulo_dir">Valor</td>
    <td class="titulo_inf">(=) Valor do Documento </td>
  </tr>
  <tr>
    <td class="linha_dir"> </td>
    <td class="linha_dir"><?PHP print $boleto['carteira']; ?></td>
    <td class="linha_dir"><?PHP print $boleto['especie']; ?></td>
    <td class="linha_dir"> </td>
    <td class="linha_dir"> </td>
    <td class="valor"><?PHP print number_format($_SESSION['valor_boleto'],2,',','.'); ?></td>
  </tr>
  <tr>
    <td colspan="5" class="titulo_inf"> </td>
    <td class="titulo_inf"> </td>
  </tr>
  <tr>
    <td colspan="6" valign="top" class="instrucoes">
		<p><strong>Instruções de impressão</strong></p>
		<p>- Imprima em impressora jato de tinta (ink jet) ou laser em qualidade normal ou alta (Não use modo econômico).</p>
		<p>- Utilize folha A4 (210 x 297 mm) ou Carta (216 x 279 mm) e margens mínimas à esquerda e à direita do formulário.</p>
		<p>- Corte na linha indicada. Não rasure, risque, fure ou dobre a região onde se encontra o código de barras.</p>
		<p> </p>
		<p><strong>Pagamento via Internet Banking</strong></p>
		<p>Caso tenha problemas ao imprimir este boleto, ou se desejar pagá-lo através do Internet Banking, utilize a linha digitável descrita abaixo:</p>
		<p> </p>
		<p align="center" class="linha_digitavelA"><?PHP print $linha_digitavel; ?></p>
		<p> </p>	
		</td>
  </tr>
  
  <tr>
    <td colspan="6" class="titulo_inf">Sacado</td>
  </tr>
  <tr>
    <td colspan="6" class="sacado">
		<?PHP print $boleto['sacado_nome']; ?><br />
		<?PHP print $boleto['sacado_end1']; ?><br />
		<?PHP print $boleto['sacado_end2']; ?></td>
  </tr>
  <tr>
    <td colspan="6" class="avalista">Sacador/Avalista</td>
  </tr>
  <tr>
    <td colspan="6"><div align="right"><strong>Recibo do Sacado  -</strong> <span class="autenticacao">Autenticação Mecânica</span> </div></td>
  </tr>
	
  <tr>
    <td colspan="6"> </td>
  </tr>		
  <tr>
    <td colspan="6"> </td>
  </tr>	
  <tr>
    <td colspan="6"> </td>
  </tr>	
  <tr>
    <td colspan="6"><img src="../siteLoja/imagens/corte.gif" width="700" height="12" /></td>
  </tr>	
  <tr>
    <td colspan="6"> </td>
  </tr>	
  <tr>
    <td colspan="6"> </td>
  </tr>						
</table>

<!-- Ficha de Compensação -->
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="157" class="logo_banco"><img src="../siteLoja/imagens/logo_banco.gif" width="140" height="23" /></td>
    <td width="51" class="num_banco"><?PHP print $boleto['num_banco'] . "-" . $boleto['dv_banco']; ?></td>
    <td width="492" class="linha_digitavel"><?PHP print $linha_digitavel; ?></td>
  </tr>
</table>

<!-- Ficha de compensação -->
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td colspan="5" class="titulo_dir">Local de Pagamento</td>
    <td width="146" class="titulo_inf">Vencimento</td>
  </tr>
  <tr>
    <td colspan="5" class="linha_dir">PAGAVEL PREFERENCIALMENTE EM QUALQUER AGÊNCIA BANCO TESTE</td>
    <td class="linha_inf"><?PHP print substr($_SESSION['datavenc'],8,2) . "/" . substr($_SESSION['datavenc'],5,2) . "/" . substr($_SESSION['datavenc'],0,4); ?></td>
  </tr>
  <tr>
    <td colspan="5" class="titulo_dir">Cedente</td>
    <td class="titulo_inf">Agência/Código Cedente</td>
  </tr>
  <tr>
    <td colspan="5" class="linha_dir"><?PHP print strtoupper($boleto["cedente_nome"]); ?></td>
    <td class="linha_inf"><?PHP print $boleto["num_agencia"] . "-" . $boleto["dv_agencia"] . "/" . $boleto["num_conta"] . "-" . $boleto["dv_conta"]; ?></td>
  </tr>
  <tr>
    <td width="109" class="titulo_dir">Data do Documento </td>
    <td width="129" class="titulo_dir">Nº do Documento </td>
    <td width="113" class="titulo_dir">Espécie Documento </td>
    <td width="84" class="titulo_dir">Aceite</td>
    <td width="119" class="titulo_dir">Data do Processamento</td>
    <td class="titulo_inf">Nosso Número</td>
  </tr>
  <tr>
    <td class="linha_dir"><?PHP print substr($_SESSION['dataped'],8,2) . "/" . substr($_SESSION['dataped'],5,2) . "/" . substr($_SESSION['dataped'],0,4); ?></td>
    <td class="linha_dir"><?PHP print $_SESSION['num_ped']; ?></td>
    <td class="linha_dir"><?PHP print $boleto["especie_doc"]; ?></td>
    <td class="linha_dir"><?PHP print $boleto["aceite"]; ?></td>
    <td class="linha_dir"><?PHP print date('d/m/Y'); ?></td>
    <td class="linha_inf"><?PHP print $boleto['carteira'] . "-" . $boleto['nosso_numero']; ?></td>
  </tr>
  <tr>
    <td class="titulo_dir">Uso do Banco </td>
    <td class="titulo_dir">Carteira</td>
    <td class="titulo_dir">Espécie</td>
    <td class="titulo_dir">Quantidade</td>
    <td class="titulo_dir">Valor</td>
    <td class="titulo_inf">(=) Valor do Documento </td>
  </tr>
  <tr>
    <td class="linha_dir"> </td>
    <td class="linha_dir"><?PHP print $boleto['carteira']; ?></td>
    <td class="linha_dir"><?PHP print $boleto['especie']; ?></td>
    <td class="linha_dir"> </td>
    <td class="linha_dir"> </td>
    <td class="valor"><?PHP print number_format($_SESSION['valor_boleto'],2,',','.'); ?></td>
  </tr>
  <tr>
    <td colspan="5" class="titulo_dir">INSTRUÇÕES (Texto de responsabilidade do Cedente) </td>
    <td class="titulo_inf">(-) Desconto/Abatimento </td>
  </tr>
  <tr>
    <td colspan="5" rowspan="9" valign="top" class="linha_dir">
		<p> </p>
		<p>ATENÇÂO:</p>
		<p>- Não pague este boleto após o seu vencimento.</p>
		<p>- Após esta data o pedido será cancelado e o boleto perderá a validade.
		<p> </p>
		<p>BOLETO PARA FINS DIDÁTICOS   *** NUNCA EFETUE SEU PAGAMENTO ***</p>
		</td>
    <td class="linha_inf"> </td>
  </tr>
  <tr>
    <td class="titulo_inf">(-) Outras Deduções </td>
  </tr>
  <tr>
    <td class="linha_inf"> </td>
  </tr>
  <tr>
    <td class="titulo_inf">(+) Mora/Multa </td>
  </tr>
  <tr>
    <td class="linha_inf"> </td>
  </tr>
  <tr>
    <td class="titulo_inf">(+) Outros Acréscimos </td>
  </tr>
  <tr>
    <td class="linha_inf"> </td>
  </tr>
  <tr>
    <td class="titulo_inf">(=) Valor Cobrado </td>
  </tr>
  <tr>
    <td class="linha_inf"> </td>
  </tr>
  <tr>
    <td colspan="6" class="titulo_inf">Sacado</td>
  </tr>
  <tr>
    <td colspan="6" class="sacado">
		<?PHP print $boleto['sacado_nome']; ?><br />
		<?PHP print $boleto['sacado_end1']; ?><br />
		<?PHP print $boleto['sacado_end2']; ?></td>
  </tr>
  <tr>
    <td colspan="5" class="avalista">Sacador/Avalista</td>
    <td class="avalista"><div align="right">Código de Baixa </div></td>
  </tr>
  <tr>
    <td colspan="6"><div align="right"><strong>Ficha de Compensação -</strong> <span class="autenticacao">Autenticação Mecânica</span> </div></td>
  </tr>
	
  <tr>
    <td colspan="6"><?PHP print $boleto['cod_grafico']; ?></td>
  </tr>		
</table>
</body>
</html>
<?PHP
// Destroi variáveis de seção
session_destroy();

// Libera os recursos usados pela conexão atual
mysql_free_result($rs);
mysql_close ($conexao);
?>

 

Espero ter ajudado no seu problema.

 

Cesar

Valeu amigo,mas seu boleto não está gerando o código de barras,e o que postei está quase tudo pronto,falta só algumas conclusões que é justamente ele gerar o valor no arquivo função.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By granderodeo
      Estou tentando pegar dados de duas tabelas logo no inicio da sessão quando o usuário realiza o login, quando utilizo o 
      SELECT * FROM usuarios, orders WHERE email = '$login' and senha= '$senha' Consigo realizar o login tranquilamente, até ai de boa, mais quando modifico o código para
       
      $comando="SELECT * FROM usuarios INNER JOIN orders ON usuarios.id_usuario = orders.id_usuario WHERE email.usuarios='$login' and senha.usuarios='$senha'"; Ele só me deixa fazer login se o usuário já tiver algum orders (pedido). O que estou tentando fazer é assim que o usuário loga, mostre também os pedidos que ele já fez etc, que são dados que estão em outra tabela. Alguém consegue ver meu erro?
    • By Fernando Rafael
      Estou tendo problemas com a leitura de porta serial com PHP, consigo facilmente escrever na mesma, mas sempre que no comando de abertura da porta eu coloco que haverá permissão de leitura o PHP trava e fica carregando infinitamente, e a porta fica bloqueada e só libera quando reiniciado o computador.
       
      Segue o cod:
      exec('MODE COM1:9600,n,8,1'); //seta configuração na porta COM $fp=fopen("COM1","r+b"); if(!$fp) {     echo("Erro ao abrir a porta com1");     exit; } else {         echo("COM1 aberta <br>"); } fwrite($fp,Chr(5));  //escrevendo valor na porta sleep(1); //pausa para retorno dos dados echo (fgets($fp)); fclose($fp); já tentei  colocar:
      fopen("COM1", "r+b");
      fopen("COM1", "r+t");
      fopen("COM1", "r");
      fopen("COM1", "w+");
      fopen("COM1", "r+");
       
      para escrever consigo normal, com o fopen("COM1", "w");.  mas já para ler.....
       
      Notei que na internet tem muito sobre esse problema, inclusive falaram em permissões de usuário, sendo que nos casos em que conseguiram, estavam usando o Linux.
      Eu estou usando o W7 e W10 com PHP 5.2, se for o caso de permissões, como resolvo isso? preciso configurar mais alguma coisa no php.ini?
       
      Também já tentei usar uma classe: phpSerial
       
      Mas retorna o seguinte erro:
      Warning: Reading serial port is not implemented for Windows in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\balanca\php_serial.class.php on line 503
       
       
    • By rogerblower
      Pessoal tenho a seguinte tabela
      id | id_etapa | id_evento | posicao | nome | pontos
      1  |  1             |        2         |   1           | joao      |  10
      2  |  1             |        2         |   2           | pedro    |  9
      3  |  1             |        2         |   3           | maria    |  8
      4  |  1             |       2          |   4           | jose       |  7
      5  |  2             |      2          |   3           | joao       |  8
      6  |  2             |  2              |   1           | pedro    | 10
      7  |  2             |   2             |  2            | maria    |  9
      8  |  2             |  2              |   4          | jose        |  7
       
      O resultado da consulta pretendido é este
      Pos  |  nome |   pontos
      1      |  pedro   | 19
      2      |   joao   | 18
      3      |  maria  |  17
      4      |  jose  |  14
       
      Com esta consulta não ordenando a coluna posicao como esperado, ela repete a posicao e não faz a soma, ex:
       1     joao     10
       1     pedro     10
      $pontuacaoa = $pdo->prepare("SELECT * FROM contador WHERE id_evento = '$id_evento' GROUP BY nome, posicao ORDER BY pontos DESC posicao ASC"); Com esta outra consulta a soma esta correta o agrupamento nome esta correto, não se repetem, mas a coluna posicao fica fora de ordem;
       
      $pontuacaoa = $pdo->prepare("SELECT * FROM contador WHERE id_evento = '$id_evento' GROUP BY nome ORDER BY pontos DESC posicao ASC"); Não estou conseguindo acertar a consulta, alguém me ajuda?
    • By rjlfurtado
      Segue abaixo o exemplo de como seria feito em SQL:
      CREATE TABLE tabela ( campo1 DOUBLE, campo2 DOUBLE, divisao DOUBLE AS (campo1/campo2) ); Agora eu preciso criar uma migração no Laravel 6, segue exemplo abaixo:
      $table->integer('qtd_saida'); $table->decimal('valor_uni', 8, 2); $table->double('valor_total')->as(qtd_saida * valor_uni);  
    • By Marxrj
      Olá a todos!,
      Queria aqui uma dica se alguém sabe como alinhar fotos no centro pelo bootstrap.
      Usando o padrão fotos retratos fica como abaixo
      __________  __________
      __________
       
      Mas eu queria que quando tivesse um número impar, a foto não ficasse alinhada na esquerda e sim centralizada como abaixo
      __________  __________
                __________
       
      Estou usando este padrão abaixo aonde ele alinha duas fotos ao lado, mas quando tem somente um ou em número impar, essa não centraliza e sim fica a esquerda.
      <div class="col-xs-12 col-sm-10 col-lg-6 col-md-3">
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.