Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
E ai pessoal tudo bom??? alguem já teve q criar código de barra de produtos com FPDF para impressão em etiquetas????
Bom o problema q estou tendo e q peguei um exemplo no site do FPDF só que pelo oq vi e li não tem como colocar o conteudo em tabelas ou celulas para poder controlar o espaçamento de um codigo com o outro e a quantidade em cada linha.
Se alguem que já passou por isso tiver alguma dica q possa ajudar eu agradeco.
t++
abracos...
entao nknk, instalar a fonte não tem nada haver, e quando disse colocar em tabelas e usar o FPDF para colocar o codigo de barra gerado em tabelas e celulas do FPDF mesmo "Cell()". O espacamento consigo controlar, mas nao consigo colocar em "Cell()" e a quantidade que vai em cada linha.
você falou de contéudo, o código de barra não é o contéudo? Poste o código para que possamos entender melhor.
##### PAGINA code13.php #####
<?php
define('FPDF_FONTPATH','font/');
require('fpdf/fpdf.php');
class PDF extends FPDF{
function EAN13($x,$y,$barcode,$h=16,$w=.35){
$this->Barcode($x,$y,$barcode,$h,$w,13);
}
function UPC_A($x,$y,$barcode,$h=16,$w=.35){
$this->Barcode($x,$y,$barcode,$h,$w,12);
}
function GetCheckDigit($barcode){
//Compute the check digit
$sum=0;
for($i=1;$i<=11;$i+=2)
$sum+=3*$barcode{$i};
for($i=0;$i<=10;$i+=2)
$sum+=$barcode{$i};
$r=$sum%10;
if($r>0)
$r=10-$r;
return $r;
}
function TestCheckDigit($barcode){
//Test validity of check digit
$sum=0;
for($i=1;$i<=11;$i+=2)
$sum+=3*$barcode{$i};
for($i=0;$i<=10;$i+=2)
$sum+=$barcode{$i};
return ($sum+$barcode{12})%10==0;
}
function Barcode($x,$y,$barcode,$h,$w,$len){
//Padding
$barcode=str_pad($barcode,$len-1,'0',STR_PAD_LEFT);
if($len==12)
$barcode='0'.$barcode;
//Add or control the check digit
if(strlen($barcode)==12)
$barcode.=$this->GetCheckDigit($barcode);
elseif(!$this->TestCheckDigit($barcode))
$this->Error('Incorrect check digit');
//Convert digits to bars
$codes=array(
'A'=>array(
'0'=>'0001101','1'=>'0011001','2'=>'0010011','3'=>'0111101','4'=>'0100011',
'5'=>'0110001','6'=>'0101111','7'=>'0111011','8'=>'0110111','9'=>'0001011'),
'B'=>array(
'0'=>'0100111','1'=>'0110011','2'=>'0011011','3'=>'0100001','4'=>'0011101',
'5'=>'0111001','6'=>'0000101','7'=>'0010001','8'=>'0001001','9'=>'0010111'),
'C'=>array(
'0'=>'1110010','1'=>'1100110','2'=>'1101100','3'=>'1000010','4'=>'1011100',
'5'=>'1001110','6'=>'1010000','7'=>'1000100','8'=>'1001000','9'=>'1110100')
);
$parities=array(
'0'=>array('A','A','A','A','A','A'),
'1'=>array('A','A','B','A','B','B'),
'2'=>array('A','A','B','B','A','B'),
'3'=>array('A','A','B','B','B','A'),
'4'=>array('A','B','A','A','B','B'),
'5'=>array('A','B','B','A','A','B'),
'6'=>array('A','B','B','B','A','A'),
'7'=>array('A','B','A','B','A','B'),
'8'=>array('A','B','A','B','B','A'),
'9'=>array('A','B','B','A','B','A')
);
$code='101';
$p=$parities[$barcode{0}];
for($i=1;$i<=6;$i++)
$code.=$codes[$p[$i-1]][$barcode{$i}];
$code.='01010';
for($i=7;$i<=12;$i++)
$code.=$codes['C'][$barcode{$i}];
$code.='101';
//Draw bars
for($i=0;$i<strlen($code);$i++){
if($code{$i}=='1')
$this->Rect($x+$i*$w,$y,$w,$h,'F');
}
//Print text uder barcode
$this->SetFont('Arial','',12);
$this->Text($x,$y+$h+11/$this->k,substr($barcode,-$len));
}
}
?>
##### PAGINA codigo_barra.php #####
<?php
require('inc/code13.php');
//ARQUIVO DE CONEXAO DO BANCO DE DADOS
require("../setup.php");
$sql = mysql_query("SELECT CO_PRODUTO
FROM 00_tb_produto
WHERE ST_PRODUTO = 'A'
ORDER BY CO_PRODUTO");
$row = mysql_num_rows($sql);
//VERIFICA SE RETORNOU ALGUMA LINHA
if(!$row){
echo "<script>
alert('[Erro] - NÃO FOI ENCONTRADO NENHUM REGISTRO!');
window.location = 'inicio.php';
</script>";
die;
}
//NUMERO DE RESULTADOS POR PÁGINA
$por_pagina = 60;
//CALCULA QUANTAS PÁGINAS VÃO SER NECESSÁRIAS
$paginas = ceil($row/$por_pagina);
$pdf = new PDF();
//INICIALIZA AS VARIÁVEIS
$linha_atual = 0;
$inicio = 0;
//PÁGINAS
for($x=1; $x<=$paginas; $x++) {
//VERIFICA
$inicio = $linha_atual;
$fim = $linha_atual + $por_pagina;
if($fim > $row) $fim = $row;
$pdf->Open();
$pdf->AddPage();
$top = 5;
$left = 5;
//EXIBE OS REGISTROS
for($i=$inicio; $i<$fim; $i++) {
$pdf->EAN13($left,$top,mysql_result($sql, $i, "CO_PRODUTO"));
$top = $top+25;
$linha_atual++;
}
}
$pdf->Output();
?>Nossa.... esta eu tirei do fundo do baú.... kakakaka.... mas eu peguei ela e funcionou perfeitamente. Agora eu estou com um problema é que o meu sistema gera o código do produto automatico.
Ao gerar o código de barras que você passou e-junior ele completa com zeros a esquerda e ainda por cima um último dígito no código. Assim ao passar a leitora o sistema nao consegue encontrar o produto por causa disto.
Teria como eu fazer esta impressao independente do tamanho do código do produto, com por exemplo 7, 10 ou 12 dígitos?
Tentei alterar o código do seu script mas tá a msg: Incorrect check digit.
O que você sugere???
Oi... eu consegui resolver o problema parcialmente. Eu comentei a parte do código da página code13.php
$barcode=str_pad($barcode,$len-1,'0',STR_PAD_LEFT);
if($len==12)
$barcode='0'.$barcode;
//Add or control the check digit
if(strlen($barcode)==12)
$barcode.=$this->GetCheckDigit($barcode);
elseif(!$this->TestCheckDigit($barcode))
$this->Error('Incorrect check digit');Ele imprime qualquer tamanho... sem problemas, só que a leitora de código de barras só lê se o arquivo tiver 13 caracteres. Se ele tiver menos ou mas a leitora de código de barras nao lê.Bom pelo menos consegui imprir, alguma outra sugestão para a leitura do código?
Atenciosamente,
Baco
puts cara já tem 1 ano que postei isso se não fosse o lembrete que recebi do forum no meu e-mail não ia ver esse post seu.
Então vamos lá, esse script que postei ai está no padrão EAN13 caso o código do seu produto sejá menor que 12digitos ele irá completar com 0(zero) à esquerda e o 13 dígito é o digito verificador. Bom pelo oq percebi você consegue gerar normal as etiquetas só q não consegue consultar seus produtos com base no valor que o leitor lê na sua aplicação isto é claro o código na etiqueta está com 0(zero) à esquerda e ainda com o dígito verificar para isso você deverá modificar sua aplicação que efetua a consulta. Uma sugestão e na hora da consulta você tratar na sua aplicação para ignorar o último digito que é o digito verificar e os 0(zero) que estão a esquerda você poderá tratar com alguma função SQL por exemplo "LPAD".
Qualquer dúvida posta ai.
abraço.
Blza eu pensei nisto também, mas aí eu entro na questão dos zeros a esquerda. Se eu retirá-los o sistema pode aceitar sem problemas, isto é fácil na programação. A questão é que se eu tiver produtos cujo o código começa com zero, aí "fudeu" :).
Por exemplo se eu tiver os códigos dos produtos sendo:
a. 716770038982 ele implementa o dígito ficando 7167700389828
b. 7898349000286 já é o código completo entao fica como esta
c. 0102006 ele implementa mais zeros a esquerda e o dígito verificador ficando 0000001020069
d. 0007846 ele implementa mais zeros a esquerda e o dígito verificador ficando 0000000078467
Pensei em fazer a programação retirando o últido dígito e os zeros a esquerda mas aí eu esbarro no item c. e d. que já tem zeros a esquerda. O que sugere?
Eu vi outros produtos que tem somente 5 e 7 dígitos no código de barras e a leitora leu estes códigos normalmente. Queria que fizesse isto tb nos meus produtos.
você pode instalar a fonte do código de barras e na hora que for imprimir ele imprime com a fonte de código de barras, só que é um processo complicado converter está fonte. Eu acabei desistindo e optei pelo word. Sobre etiquetas, elas são em tabelas, no exemplo que tem lá e dá para alterar os espaçamento, exceto um que não me lembro.