Impressão QR CODE / PDF147 utilizando C nas impressoras ESC POS

1. Impressão QR CODE / PDF147 utilizando C nas impressoras ESC POS

raduan
raduanmendes

(usa Outra)

Enviado em 23/11/2017 - 16:07h

Depois de muito procurar uma solução de como imprimir QrCode nas impressoras do padrão ESC/POS utilizando C no linux, não encontrei nada em C, então resolvir criar uma função e disponibiliza-la para a comunidade.

Espero auxiliar os desenvolvedores que estão na parte do QrCode para sistemas SAT e NFCe.

Segue código abaixo:

int Print_qrcode_EscPos (char* szText)
{
int iRet =0;
char szLine[2046];
char szBuffer[]= "\x1D\x28\x6B\x03\x00\x31\x43?"
"\x1D\x28\x6B\x03\x00\x31\x45\x33"
"\x1D\x28\x6B??\x31\x50\x30";

int iSize = strlen(szText) + 3;
int lsb, msb;
memset(szLine, 0, sizeof(szLine));

FILE *f = fopen("qr_print.prt", "w");
if (f == NULL) f = stderr;

lsb = (iSize % 256);
msb = (iSize / 256);

szBuffer[7] = (char) 3; //Tamanho do QrCode -> 2 ao 12.
szBuffer[19] = (char) lsb;
szBuffer[20] = (char) msb;

fwrite (szBuffer, sizeof(char), sizeof(szBuffer)-1, f);
fwrite (szText , sizeof(char), strlen(szText), f);
fwrite ("\x1D\x28\x6B\x03\x00\x31\x51\x30", sizeof(char), 8, f);
fclose(f);

f = fopen("qr_print.prt", "r");
{
fgets(szLine, sizeof(szLine), f);
fclose(f)
}

iRet = dwrite (glPrinterHandle, (unsigned char *) szLine, (sizeof(szBuffer)-1) + (strlen(szText)) + 8);
//glPrinterHandle -> Porta de impressão.

return iRet;
}


no meu código a variavel glPrinterHandle é o meu device, a impressora EPSON.

O código cria o arquivo qr_print.prt com os comandos, a maneira mais facil de validar é danod em echo na porta:

echo qr_print.prt > /dev/ttyS1

Onde ttyS1 deve ser substituido pela sua porta.

Espero ter ajudado, abraço!

Raduan Mendes


  


2. Muitos erros ao compilar! Pode ajudar!

Dênio dos Santos
denio

(usa Slackware)

Enviado em 28/02/2018 - 16:47h

gcc qr.c

qr.c: In function ‘Print_qrcode_EscPos’:
qr.c:12:15: warning: implicit declaration of function ‘strlen’ [-Wimplicit-function-declaration]
int iSize = strlen(szText) + 3;
^
qr.c:12:15: warning: incompatible implicit declaration of built-in function ‘strlen’
qr.c:12:15: note: include ‘<string.h>’ or provide a declaration of ‘strlen’
qr.c:14:3: warning: implicit declaration of function ‘memset’ [-Wimplicit-function-declaration]
memset(szLine, 0, sizeof(szLine));
^
qr.c:14:3: warning: incompatible implicit declaration of built-in function ‘memset’
qr.c:14:3: note: include ‘<string.h>’ or provide a declaration of ‘memset’
qr.c:35:3: error: expected ‘;’ before ‘}’ token
}
^
qr.c:37:11: warning: implicit declaration of function ‘dwrite’ [-Wimplicit-function-declaration]
iRet = dwrite (glPrinterHandle, (unsigned char *) szLine, (sizeof(szBuffer)-1) + (strlen(szText)) + 8);
^
qr.c:37:19: error: ‘glPrinterHandle’ undeclared (first use in this function)
iRet = dwrite (glPrinterHandle, (unsigned char *) szLine, (sizeof(szBuffer)-1) + (strlen(szText)) + 8);
^
qr.c:37:19: note: each undeclared identifier is reported only once for each function it appears in



3. Qual include que falta?

Dênio dos Santos
denio

(usa Slackware)

Enviado em 28/02/2018 - 16:52h

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



4. Está neste ponto!

Dênio dos Santos
denio

(usa Slackware)

Enviado em 28/02/2018 - 16:52h

gcc qr.c
qr.c: In function ‘Print_qrcode_EscPos’:
qr.c:36:3: error: expected ‘;’ before ‘}’ token
}
^
qr.c:38:11: warning: implicit declaration of function ‘dwrite’ [-Wimplicit-function-declaration]
iRet = dwrite (glPrinterHandle, (unsigned char *) szLine, (sizeof(szBuffer)-1) + (strlen(szText)) + 8);
^
qr.c:38:19: error: ‘glPrinterHandle’ undeclared (first use in this function)
iRet = dwrite (glPrinterHandle, (unsigned char *) szLine, (sizeof(szBuffer)-1) + (strlen(szText)) + 8);
^
qr.c:38:19: note: each undeclared identifier is reported only once for each function it appears in






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts