Closed ctenov closed 1 year ago
Tudo bem Daniel? Cara, na Epson TM-T88 pelo menos eu tenho certeza que era pra estar funcionando, pois foi numa dessa que eu implementei e testei os comandos anos atras...
Na biblioteca do Luke tambem estaria funcionando, pois ele mesmo testou e tem uma galera que ja usa faz tempo. Agora falando especificamente da impressora Bematech, as vezes a impressora está configurada para BemaPOS e não ESC/POS
Mas muito estranho que nenhuma das suas impressoras está imprimindo... Tenta ver se a Sweda e Gertec não tem seu proprio manual de comandos ESC/POS pra impressão do CODE128. Às vezes é um byte só que muda e que inclusive pode ser até aceito pela Epson. Além disso é bom ver se elas suportam esse tipo de codigo de barras, o que eu assumiria que sim, mas nunca se sabe...
Por fim, se nada der certo, parte pra outro tipo de codigo de barras como o ITF que vc mencionou ou o Code11 ou Code93...
Então, eu testei imprimir o CODE128 via driver da SWEDA (por exemplo) e imprime normal. Quando eu 'mudo' para imprimir via ESCPOS daí não funciona. Sobre usar CODE11 ou CODE93 não sei se é possível (nunca pensei nisso) porque preciso imprimir o Código de Barras do CFe e até onde sei deveria ser via CODE128... Com relação ao BemaPos / ESCPOS eu creio que está tudo certo porque TUDO funciona em todas essas impressoras MENOS o CODE128 :( Sobre ter o próprio comando me parece estranho porque era esperado justamente o contrário e é somente isso que não funciona... Bom, vou tentar fuçar mais coisas aqui mas se vc tiver alguma notícia por gentileza me envie...
Abs Daniel
No manual de orientações do SAT não há nenhuma determinação de qual tipo de codigo de barras você deve utilizar para representação da chave de acesso, inclusive verdade seja dita, ninguém nem usa ele, pois o QRCode já contém a chave de acesso e muito mais informações, e o usuario comum não ver scanear nada...
Os Layouts permitem inclusive você utilizar o código de barras de 2 maneiras:
Se não me engano nesse exemplo do README deste repositorio eu estou dividindo em 2 codigos de barra. Mas você pode utilizar qualquer uma das opções, tanto pra tipo de Codigo de Barras quanto para qual Layout usar.
Na verdade, voltei para consultar o manual (que eu queria ter certeza se ele especificava um tipo) e encontrei esse trecho
Mas, vc tem razão que ninguém scaneia esse código :)
Mas tentei o CODE93 e não imprimiu tb :( e o CODE 11 que vc citou talvez tenha outro nome na sua biblioteca (?) porque não encontrei ele rsrsrs
Há... Que estranho, não me lembrava desse texto aí não. Bom, eu particularmente já vi gente imprimindo em outros formatos que não o Code 128 (é notavel a diferença na impressão). Sobre o Code 11 é só um tipo de codigo de barras, qdo citei nem sabia dizer se é algo suportado por comandos ESC/POS
Mas nossa, tá muito estranho nem o Code128 e nem o Code93 imprimir... Duro que não tenho nenhuma impressora aqui pra debugar e ver se houve um bug introduzido sem querer desde a implementação.
Você conseguiria mandar aqui os bytes em hexa que a impressora está recebendo pra esse comando especifico do Code128?
@ctenov olha só uma coisa que vi no codigo fonte dessa lib: Aparentemente o Code128 tipo B está hardcoded. Pelo que vc postou deveria ser utilizado o tipo C, tenta mudar esse byte pra ver se imprime nas suas impressoras?
Segue a pagina do manual que fala sobre o Code 128 9
Olá Igor, muito obrigado pelo seu retorno ! Eu gostaria muito de usar sua biblioteca. Gostei muito dela. Bem 'clean' e direto ao ponto. Por isso passei a manhã toda fuçando... Hoje estou de volta ao meu escritório e consegui fazer imprimir o CODE 128 na impressora GERTEC e na Bematech mas não consegui na SWEDA... Como eu tinha certeza que a SWEDA era capaz de fazer esse código (porque pelo driver dela eu consigo) fui fuçando e lendo o Manual (que está no seu repositório) encontrei um detalhe interessante na documentação do código de barras:
Isso me deu a ideia de tentar um número com menos dígitos e de fato deu certo ! Daí percebi que o problema é que usando um número grande ele "estoura" a largura horizontal e por isso não imprime. Então peguei sua função PrintBarCode, copiei no meu código, dei outro nome e alterei a primeira linha para enviar não somente a 'altura' do código mas também a 'largura'. Veja
var height = new byte[] { 0x1D, 0x68, (byte)heightInDots, 0x1D, 0x77, 0x2 };
Com isso consegui imprimir um CODE128 com 13 dígitos ! (Mas é preciso chegar a 22 para imprimir a chave do CFe)
Se vc olhar a imagem a seguir vai perceber que o driver da SWEDA consegue "comprimir" as barras num nível bem maior do que parece ser possível com ESCPOS ...
Você sabe alguma maneira de "espremer" mais as linhas para conseguir fazer caber ?
(Obs: tentei mudar o byte para CODE128 C como está a seguir mas daí ele imprimiu só um pedacinho do código de barras...)
bar = new byte[] { 0x7B, 0x49 }.Add(bar); // Troquei o 0x42 pelo 0x49
Não sei se fiz certo...
Ops, desculpa no lugar de 0x49 o correto é 0x43 ... mas o resultado é que ele imprimiu exatamente o mesmo que havia impresso com o 0x42 original !
Igor, obrigado mais uma vez. Deu certo agora ! (Depois de muita pesquisa) A primeira documentação que consultei dizia que a largura (width) do código de barras podia ser um número entre '2' e '6' mas mesmo usando o número menor ('2') só era possível imprimir 20 dígitos. Daí encontrei uma outra documentação que dizia ser possível usar o número '1' também ! Fiz o teste e deu certo: o código de barras ficou mais "fininho" e couberam os 22 dígitos em uma linha de impressão CODE128 Abs
Opa perfeito! Quer fazer uma PR com esse parametro extra na funcao de imprimir o codigo de barras? Eu posso mergear a PR e lançar uma versão nova da DLL pra vc não ter que ficar adicionando manualmente codigo em cima dela.
Seria excelente !
Acho que vc poderia inserir um último parâmetro na função
public static byte[] PrintBarCode(BarCodeType barCodeType, string barCode, int heightInDots = 162, int widthXXX = 1.)
Mas embora eu esteja colocando como 'int' creio que o melhor é usar um ENUM indo de 1 a 6 para "forçar" o usuário a um número válido...
Também não precisa usar a denominação que usei... foi apenas um exemplo Abs
Só um detalhe, eu prefiro que vc mesmo altere aí, assim vc mantém a padronização. Eu só fucei um pouco e não quero me aventurar a mexer no código rsrsrs
@ctenov fiz o merge da PR, vc poderia baixar o novo codigo e testar se funcionou o novo parametro? Se tudo der certo já lanço versão do Nuget com novo codigo.
Obrigado
Eu estou usando via Nuget :(
Ok, publiquei a versão 1.2.3 (https://www.nuget.org/packages/ESCPOS/1.2.3)
Por favor, poderia atualizar pra essa versão e testar se a impressão está funcionando com o novo parametro?
@ctenov
Ficou EXCELENTE !!!! Testado em GERTEC G250 / Bematech MP 2800 / SWEDA SI300 Muito obrigado !
De nada
Olá Igor,
primeiramente parabéns pela sua biblioteca ! Show de bola !
Baixei sua biblioteca para uso no Windows C# .Net Framework 4.7.2 e já fiz alguns testes com sucesso, porém, não consigo imprimir o código de barras CODE128 (para usar no CFe)...
Já testei na Epson TM-T88, na Bematech MP 2800TH, na SWEDA SI-300 e na Gertec G250.
O código ITF vai normal, o QRCODE também mas o CODE128 simplesmente não imprime. (Fica em branco)
Curioso é que eu também tentei a biblioteca ESP-POS-NET do colega Luke e o resultado foi exatamente o mesmo.
Tenho certeza que essas impressoras conseguem imprimir esse código porque usando a biblioteca (DLL) específica de cada uma delas funciona.
Vc consegue dar alguma luz ?
Abaixo o programa de "teste" que estou utilizando:
Muito agradecido
Daniel Constantinov