O código de barras até que não é complicado
- O início do código de barras usa 4 barras finas
- O final é uma barra larga e mais 2 finas
- Cada número é representado por 5 barras, sendo sempre 2 largas e 3 finas.
- O "interleave 2Of5", seria barras intercaladas de dois números. Supondo que as barras de um número fossem AAAAA e do outro BBBBB, na hora de imprimir seria um de cada: ABABABABAB.
- A barra larga precisa ser 2 a 3 vezes a largura da barra fina, mas sempre a mesma proporção no código inteiro.
- Por fim, é só uma barra branca, outra preta, branca, preta, etc. Só ficar trocando a cor na hora de imprimir.
O maior problema mesmo é evitar que o desenho seja deformado na impressão.
Aqui a rotina que montei. Pode ser interessante pra criar pra outros códigos.
E olhando a explicação acima, vai ficar fácil de entender o que ela faz.
Ela codifica os números, intercala cada par de números, e acrescenta início e fim.
Código: Selecionar todos
Function BarCode(cBarras)
Local cBarCodeI25 := "", nCont, nCont2, cBarCodeNumber, cBarNumberA, cBarNumberB
cBarCodeNumber := Array(10)
cBarCodeNumber[1] := "FFLLF"
cBarCodeNumber[2] := "LFFFL"
cBarCodeNumber[3] := "FLFFL"
cBarCodeNumber[4] := "LLFFF"
cBarCodeNumber[5] := "FFLFL"
cBarCodeNumber[6] := "LFLFF"
cBarCodeNumber[7] := "FLLFF"
cBarCodeNumber[8] := "FFFLL"
cBarCodeNumber[9] := "LFFLF"
cBarCodeNumber[10] := "FLFLF"
For nCont = 1 To Len(cBarras) - 1 Step 2
cBarNumberA = cBarCodeNumber[Val(Substr(cBarras, nCont, 1))+1]
cBarNumberB = cBarCodeNumber[Val(Substr(cBarras, nCont + 1, 1))+1]
For nCont2 = 1 To 5
cBarCodeI25 += Substr(cBarNumberA, nCont2, 1) + Substr(cBarNumberB, nCont2, 1)
Next
Next
cBarCodeI25 := "FFFF" + cBarCodeI25 + "LFF"
Return cBarCodeI25
O resultado é apenas uma lista informando se vai ser barra larga ou fina.
Na hora de imprimir, só ir variando entre branca/preta.
Ao que me parece, a zebra usa a lógica acima e acaba retornando um array com as coordenadas das barras pretas.
Mas como é a zebra que chama a rotina, talvez ela ajuste a resolução do PDF também.
O problema de resolução seria igual ter uma tela de 80 colunas e precisar colocar 81 caracteres.
Triplicando a resolução (algo como compactar letra), aonde caberiam 80 caracteres, passam a caber 240.
É legal... principalmente quando funciona...