Código de barras generado utilizando iReport con la librería barcode4j
Incluir librerias:
<dependency>
<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-bridge</artifactId>
<version>1.7</version>
</dependency>
Crear codigo para enviar a iReport
final char FNC1 = Code128LogicImpl.FNC_1;
final char CD = EAN128Bean.DEFAULT_CHECK_DIGIT_MARKER;
String cod = "415770105500005" + CD + FNC1 + "80209115675110080555" + FNC1 + "390000021170" + FNC1 + "9620080402";
Si se imprime la variabla cod veriamos lo siguiente:
415770105500005ðñ80209115675110080555ñ390000021170ñ9620080402
El texto del codigo de barras deseado es el siguiente:
(415)7701055000053(8020)9115675110080555(3900)00021170(96)20080402
En iReport campo "Code Expression", debes enviar el codigo generado en las lineas anteriores en Java.
*En iReport campo "Module Width", se puede adicionar un valor para modificar el tamaño de las barras permitiendo que se muestren todos los numeros del texto. En mi caso el valor utilizado es 1.0
Gracias por tu post, fue de mucha ayuda, no encontre un ejemplo asi en ninguna pagina en ingles.
ResponderEliminarUna pregunta. se puede introducir numeros con decimales, en este IA (3100), con formato n4+n6. ej. (3100)4500.15 ??
ResponderEliminarEn este caso debes tener un numero de decimales exacto. Por ejemplo si defines dos decimales para el numero 450015, cuando obtengas el numero sabrás que los dos últimos dígitos son siempre decimales. Para evitar confusiones recomiendo siempre completar el numero con ceros a la izquierda para mayor estandarización, por ejemplo se define un numero de 8 dígitos quedaría: 00450015.
EliminarHola buenas tardes muchisisisimas gracias estuve buscando por dias la solucion a este problemay gracias a ud funciono gracias gracias graciass!!
ResponderEliminarCon mucho gusto!!
EliminarOla muchas gracias por tu aporte.. pero necesito hacerte una consulta
ResponderEliminarestoy diseñando una factura con código de barras en web, y de prueba tome tu código:
asi declaro tu codigo
final char FNC1 = Code128LogicImpl.FNC_1;
final char CD = EAN128Bean.DEFAULT_CHECK_DIGIT_MARKER;
String cod = "4157709998511392" + CD + FNC1 + "80209115675110080555" + FNC1 + "390000021170" + FNC1 + "9620080402";
así paso la variable por medio de parámetros al ireport
File reportFile = new File(application.getRealPath("Factura/Factura.jasper"));
Map parameters = new HashMap();
parameters.put("NOFAC", NoFac);
parameters.put("Barra", cod);
byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conecta.getConnection());
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
conecta.desconectar();
pero cuando ejecuta la pagina web me arroja este error
net.sf.jasperreports.engine.JRRuntimeException: java.lang.IllegalArgumentException: Unable to read AI: Characters must be numerical! Accepted start of Message: "(415)7709998511392"
cual seria el error agradezco tu ayuda
Hola Harold,
EliminarEl primer numero que tienes, "4157709998511392" corresponde al EAN/UCC 13. Esto es: 415 + (numero de 12 dígitos) + dígito de verificación.
Este último, el dígito de verificación, se adiciona en la constante CD (EAN128Bean.DEFAULT_CHECK_DIGIT_MARKER), por lo que
no es necesario que lo tengas en tu código.
Tu código quedaría de la siguiente forma:
String cod = "415770999851139" + CD + FNC1 + "80209115675110080555" + FNC1 + "390000021170" + FNC1 + "9620080402";
Espero ser de ayuda.
después de 3 dias buscando y rompiéndome la cabeza, encuentro este pequeño tutorial, muchas gracias.
ResponderEliminarHola este post me ayudo mucho pero tengo un problema, me estan dando un numero de convenio de 5 digitos y al tratar de colocarle 0 delante para rellenar los 13 digitos me trae este error:
ResponderEliminarCheckdigit is wrong! Correct is 5 but I found 6! Accepted start of Message: "(415)000000002241"
llevo dias con este error, si alguien me ayuda se lo agradeceria mucho el numero del convenio es: 22416
Hola, hace mucho no trabajo con esto.. y no tengo mas datos para ayudar con tu error!
ResponderEliminar