Preguntas frecuentes sobre TBarCode DLL / TBarCode Library
Cómo crear un QR Code de anexo estructurado (Structured Append)
Cómo crear un QR Code de anexo estructurado (Structured Append)
Ejemplo: si tiene una cadena base64 que desea codificar con varios QR Codes enlazados entre sí, siga estos pasos:
- Divida la cadena base64 en subcadenas manejables. El límite superior para el tamaño de una subcadena es de aproximadamente 2000 caracteres, pero depende de factores como las capacidades del escáner, el espacio disponible y la resolución de impresión. Genere un QR Code independiente para cada subcadena.
- Establezca la cabecera de Structured Append en cada QR Code, especificando el número total de códigos concatenados, el índice actual y el byte de paridad. Calcule el byte de paridad sobre la cadena completa, no por cada código individual. La cabecera de Structured Append ayuda al escáner a determinar cuántos QR Codes hay que leer y si los datos son correctos.
A continuación se muestra una función de ejemplo en C++ para guardar un QR Code con una cabecera Append:
ERRCODE SaveStructAppendQRCode(LPCSTR path, LPCSTR dataStr, int dataLen, int count, int index, BYTE parity)
{
ERRCODE eCode = ErrOk;
t_BarCode* pBarCode = NULL; // barcode handle
double const dpi = 300;
RECT rect = { 0,0,255,255 };
if (eCode == ErrOk)
eCode = BCAlloc(&pBarCode);
if (eCode == ErrOk)
eCode = BCSetBCType(pBarCode, eBC_QRCode);
if (eCode == ErrOk)
eCode = BCSet_QR_Append(pBarCode, count, index, parity);
if (eCode == ErrOk)
eCode = BCSetTextA(pBarCode, dataStr, dataLen);
if (eCode == ErrOk)
eCode = BCCreate(pBarCode);
if (eCode == ErrOk)
eCode = BCSetDPI(pBarCode, dpi, dpi);
if (eCode == ErrOk)
eCode = BCSetIgnoreDpiFromDC(pBarCode, TRUE);
if (eCode == ErrOk)
eCode = BCSetSizeMode(pBarCode, e_SizeMode::eSizeMode_FitToBoundingRect);
if (eCode == ErrOk)
eCode = BCGetOptimalBitmapSize(pBarCode, &rect, 3, 3);
if (eCode == ErrOk)
eCode = BCSaveImageA(pBarCode, path, eIMBmp, rect.right, rect.bottom, dpi, dpi);
// use BCSaveImageEx for color bitmap
if(pBarCode)
BCFree(pBarCode);
return eCode;
}
A continuación, cree los QR Codes individuales con cabeceras Structured Append como se muestra a continuación:
ERRCODE eCode = ErrOk;
const char* base64Str = "Your base64 string goes here...";
int base64Len = strlen(base64Str);
if (base64Len > 400)
{
BYTE parity = BCCalcStructApp_ParityA(base64Str, base64Len);
if (eCode == ErrOk)
eCode = SaveStructAppendQRCode("c:\\temp\\qrcode_3-1.bmp", &base64Str[0], 200, 3, 1, parity);
if (eCode == ErrOk)
eCode = SaveStructAppendQRCode("c:\\temp\\qrcode_3-2.bmp", &base64Str[200], 200, 3, 2, parity);
if (eCode == ErrOk)
eCode = SaveStructAppendQRCode("c:\\temp\\qrcode_3-3.bmp", &base64Str[400], base64Len - 400, 3, 3, parity);
}
if (eCode != ErrOk)
{
char szErr[255];
BCGetErrorText(eCode, szErr, 255);
printf(szErr);
}
En el código proporcionado, se omite por simplicidad un bucle para calcular dinámicamente el número de símbolos e iterar por la cadena base64. En su lugar, se usan subcadenas fijas de 200 caracteres cada una, con un total de 3 símbolos en la cadena. Asegúrese de adaptarlo según sea necesario.
- Ajuste el tamaño del código de barras o el tamaño de un punto de matriz mediante los parámetros ScaleX y ScaleY en la función BCGetOptimalBitmapSize(..).
- BCSaveImage(..) genera un BMP monocromo. Para un BMP en color, use BCSaveImageEx(..) o la función BitmapToFile(..).
Tenga en cuenta que probar los QR Codes de Structured Append puede requerir un escáner capaz de decodificarlos correctamente. Algunas apps o escáneres de hardware pueden no admitir Structured Append.