Cómo crear firma de código de barras Java para documentos PDF
Introducción
En este tutorial aprenderá a create barcode signature Java para archivos PDF usando GroupDocs.Signature. Ya sea que necesite incrustar códigos de producto, IDs de auditoría o cualquier dato estructurado en un contrato, las firmas de código de barras le permiten agregar información legible por máquina que puede escanearse al instante mientras el documento se mantiene criptográficamente seguro. Recorreremos la configuración, el código, la personalización y los consejos de mejores prácticas para que pueda comenzar a agregar firmas de código de barras a sus PDFs en minutos.
Respuestas rápidas
- ¿Qué biblioteca agrega firmas de código de barras en Java? GroupDocs.Signature for Java.
- ¿Qué tipo de código de barras es el mejor para el comercio minorista?
GS1CompositeBar(industry‑standard for product tracking). - ¿Necesito una licencia para producción? Sí – se requiere una licencia de GroupDocs comprada.
- ¿Puedo agregar firmas digitales y de código de barras? Absolutamente; combínelas para seguridad y escaneabilidad.
- ¿El código es compatible con Java 11 y posteriores? Sí, la API funciona con JDK 8+.
¿Qué es create barcode signature java?
create barcode signature java se refiere al proceso de incrustar programáticamente un código de barras en un PDF usando código Java. GroupDocs.Signature proporciona una API simple que genera la imagen del código de barras, la posiciona en la página y guarda el documento firmado en una operación sin interrupciones.
¿Por qué usar firmas de código de barras?
Las firmas de código de barras le brindan metadatos legibles por máquina dentro de un PDF firmado legalmente. Permiten una verificación visual instantánea, agilizan el escaneo de la cadena de suministro y permiten que los sistemas posteriores extraigan datos estructurados sin abrir el archivo. Se admiten más de 60 formatos de códigos de barras, y GS1CompositeBar puede codificar identificadores de producto, números de serie y códigos de lote en un solo símbolo compacto, perfecto para el comercio minorista, la atención médica y las finanzas.
Requisitos previos
- Kit de desarrollo de Java: JDK 8 o más reciente (Java 11, 17, 21 funcionan).
- Herramienta de compilación: Maven o Gradle – elija la que prefiera.
- IDE: IntelliJ IDEA, Eclipse o VS Code.
- Biblioteca GroupDocs.Signature: Añada la dependencia como se muestra a continuación.
- Licencia: Prueba gratuita para desarrollo; una licencia comprada para producción.
Agregar GroupDocs.Signature a su proyecto
Para usuarios de Maven, añada esto a su pom.xml:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Para usuarios de Gradle, añada esto a su build.gradle:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Acerca de la licencia: GroupDocs ofrece una prueba gratuita que es perfecta para pruebas y desarrollo. Puede descargarla desde su página de lanzamientos. Cuando esté listo para producción, necesitará comprar una licencia o solicitar una temporal en el sitio web de GroupDocs. Para un uso detallado de la API vea la Referencia de API, consulte la Guía del desarrollador para instrucciones paso a paso, y haga preguntas en el Foro de GroupDocs. El mismo enlace de compra también se lista como la página de compra.
¿Cómo configurar GroupDocs.Signature en Java?
La clase Signature representa un documento y proporciona métodos para aplicar firmas, buscar contenido y gestionar recursos. Cree una instancia de Signature para abrir su PDF y prepararlo para la firma. La clase Signature es el componente central de GroupDocs.Signature que gestiona la carga del documento, el manejo de recursos y el flujo de trabajo de firma, asegurando que todas las operaciones se realicen de forma segura y eficiente.
import com.groupdocs.signature.Signature;
// Point to your PDF file
Signature signature = new Signature("path/to/your/document.pdf");
Importante: Siempre libere el objeto Signature después de usarlo — esto libera los manejadores de archivo y libera memoria.
¿Cómo configurar las opciones de firma de código de barras?
La clase BarcodeSignOptions define cada aspecto del código de barras que está a punto de incrustar, desde la carga de datos hasta el estilo visual. Actúa como un contenedor para todas las configuraciones relacionadas con códigos de barras, como tipo, tamaño, colores y ubicación. A continuación se muestra una configuración mínima que crea un código de barras GS1CompositeBar que contiene un GTIN y un número de serie, y también demuestra cómo establecer márgenes y colores de fondo para una legibilidad óptima.
import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;
// Create barcode with GS1 format data
BarcodeSignOptions options = new BarcodeSignOptions("(01)03212345678906/(21)A1B2C3D4E5F6G7H8");
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
La cadena "(01)03212345678906/(21)A1B2C3D4E5F6G7H8" sigue el estándar GS1:
(01)= GTIN (identificador global de producto)03212345678906= código real del producto(21)= identificador de número de serieA1B2C3D4E5F6G7H8= serie única
Puede reemplazar esto con cualquier texto para códigos QR, Code128, DataMatrix, etc. Se admiten más de 60 tipos de códigos de barras; consulte la documentación de GroupDocs para la lista completa.
¿Cómo posicionar y personalizar el código de barras?
El posicionamiento y el estilo se controlan a través del mismo objeto BarcodeSignOptions. Use setTop, setLeft, setWidth y setHeight para definir coordenadas y dimensiones exactas. Configurar setAllPages(true) agrega el código de barras a cada página automáticamente, mientras que setPageNumber(1) apunta a una página específica. También puede rotar el código de barras, agregar un color de fondo o ajustar los márgenes para asegurar que el código de barras no se superponga al contenido existente.
// Set position and apply to all pages
options.setTop(200); // Set vertical position
options.setAllPages(true);
Para un diseño más preciso, también puede anclar el código de barras a una página específica, rotarlo o agregar un color de fondo:
options.setLeft(100); // 100 pixels from left edge
options.setTop(200); // 200 pixels from top
options.setWidth(300); // Barcode width in pixels
options.setHeight(100); // Barcode height in pixels
options.setPageNumber(1); // Only sign page 1 (removes setAllPages)
La personalización visual (colores de primer plano/fondo, márgenes, etiquetas de texto) está disponible mediante propiedades adicionales:
options.setMargin(new Padding(10)); // Add padding around barcode
options.setBackground(new Background()); // Set background color
options.setForeColor(Color.BLACK); // Barcode color
options.setBackgroundColor(Color.WHITE); // Background color
¿Cómo firmar el documento con un código de barras?
El método sign en la instancia Signature aplica las opciones configuradas y escribe el documento firmado en disco. Devuelve un objeto SignResult que indica cuántas firmas se aplicaron y si hubo advertencias. Este método maneja toda la manipulación de PDF de bajo nivel, por lo que no necesita trabajar directamente con bibliotecas de PDF.
try {
SignResult signResult = signature.sign(outputPath, options);
System.out.println("Document signed successfully!");
System.out.println("Signed document saved to: " + outputPath);
} finally {
if (signature != null) {
signature.dispose();
}
}
El bloque try‑finally circundante garantiza que el objeto Signature se libere incluso si ocurre una excepción, evitando fugas de manejadores de archivo.
if (signResult.getSucceeded().size() > 0) {
System.out.println("Successfully added " + signResult.getSucceeded().size() + " signature(s)");
}
Ejemplo completo de trabajo
Juntando todo, aquí hay un método único que carga un PDF, agrega un código de barras GS1CompositeBar y guarda el archivo firmado:
import com.groupdocs.signature.Signature;
import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;
public class BarcodeSigningExample {
public void signPdfWithBarcode(String inputPath, String outputPath) {
Signature signature = null;
try {
// Initialize signature
signature = new Signature(inputPath);
// Configure barcode
BarcodeSignOptions options = new BarcodeSignOptions(
"(01)03212345678906/(21)A1B2C3D4E5F6G7H8"
);
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
options.setTop(200);
options.setAllPages(true);
// Sign and save
SignResult result = signature.sign(outputPath, options);
System.out.println("Signing completed: " + result.getSucceeded().size() + " signature(s) added");
} catch (Exception e) {
System.err.println("Error signing document: " + e.getMessage());
e.printStackTrace();
} finally {
if (signature != null) {
signature.dispose();
}
}
}
}
Este método está listo para producción: valida la entrada, gestiona recursos y reporta el resultado.
¿Cómo agregar firmas digitales y de código de barras?
Para máxima seguridad, agregue primero una firma digital criptográfica y luego superponga el código de barras. La firma digital garantiza la integridad del documento, mientras que el código de barras proporciona una verificación visual rápida y datos legibles por máquina. Use la clase DigitalSignOptions para el primer paso y luego aplique BarcodeSignOptions como se mostró arriba.
// First, add digital signature
DigitalSignOptions digitalOptions = new DigitalSignOptions("certificate.pfx");
digitalOptions.setPassword("cert_password");
signature.sign(outputPath, digitalOptions);
// Then, add barcode on top
BarcodeSignOptions barcodeOptions = new BarcodeSignOptions("DATA");
barcodeOptions.setEncodeType(BarcodeTypes.QR);
signature.sign(outputPath, barcodeOptions);
El PDF resultante es tanto legalmente vinculante (firma digital) como instantáneamente legible por cualquier escáner de códigos de barras.
Trabajando con diferentes tipos de códigos de barras
Cambiar el formato del código de barras es tan sencillo como cambiar un valor de enumeración. A continuación se muestra un ejemplo que sustituye el GS1CompositeBar por un código QR:
// Define barcode sign options with sample text
BarcodeSignOptions options = new BarcodeSignOptions("Sample Text");
// Assign specific barcode type
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
Y aquí está el mismo cambio para un código de barras lineal Code128:
options.setEncodeType(BarcodeTypes.QR); // QR code
options.setEncodeType(BarcodeTypes.Code128); // Code 128
options.setEncodeType(BarcodeTypes.DataMatrix); // Data Matrix
Recuerde que cada tipo de código de barras tiene sus propios límites de capacidad de datos: los códigos QR pueden contener miles de caracteres, mientras que Code39 está limitado a alfanuméricos.
Casos de uso del mundo real
Gestión de la cadena de suministro
Incrustar un GS1CompositeBar en los manifiestos de envío permite al personal del almacén escanear números de orden, destinos y códigos de lote sin abrir el PDF.
BarcodeSignOptions options = new BarcodeSignOptions(
"(01)" + gtin + "/(21)" + serialNumber + "/(10)" + batchNumber
);
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
Documentación sanitaria
Los códigos QR en los formularios de consentimiento pueden escanearse para archivar automáticamente el documento bajo el expediente correcto del paciente.
String patientData = "PATIENT_ID:" + patientId + "|DOC_TYPE:CONSENT|DATE:" + dateString;
BarcodeSignOptions options = new BarcodeSignOptions(patientData);
options.setEncodeType(BarcodeTypes.QR);
Servicios financieros
Los IDs de transacción codificados en un código de barras permiten a los auditores verificar el cumplimiento con un simple escaneo.
String complianceData = "TXN:" + transactionId + "|AGENT:" + agentId + "|BRANCH:" + branchCode;
BarcodeSignOptions options = new BarcodeSignOptions(complianceData);
options.setEncodeType(BarcodeTypes.PDF417);
Control de calidad en manufactura
Los informes de inspección firmados con códigos de barras que contienen números de lote e IDs de inspector hacen que el análisis de causa raíz sea instantáneo.
String qcData = "BATCH:" + batchNumber + "|INSPECTOR:" + inspectorId + "|RESULT:" + passFailStatus;
BarcodeSignOptions options = new BarcodeSignOptions(qcData);
options.setEncodeType(BarcodeTypes.DataMatrix);
Problemas comunes de implementación
Problema 1: Excepción “File is already in use”
Respuesta: El archivo permanece bloqueado si una instancia previa de Signature no se liberó. Siempre envuelva el código de firma en un bloque try‑finally y llame a signature.dispose().
Signature signature = null;
try {
signature = new Signature(filePath);
// ... your code ...
} finally {
if (signature != null) {
signature.dispose();
}
}
Problema 2: El código de barras no aparece en el PDF
Respuesta: Verifique que los valores setTop/setLeft estén dentro de los límites de la página, aumente el ancho/alto del código de barras y asegúrese de que los colores de primer plano/fondo contrasten con el fondo de la página.
// Make sure dimensions are reasonable
options.setTop(100); // Not 10000
options.setLeft(100);
options.setWidth(300); // At least 200 pixels for readability
options.setHeight(100);
// Ensure contrast
options.setForeColor(Color.BLACK);
options.setBackgroundColor(Color.WHITE);
Problema 3: Excepción “Invalid Barcode Data”
Respuesta: Los códigos de barras GS1 requieren una notación estricta de paréntesis. Use los Identificadores de Aplicación correctos (p. ej., (01), (21)) y evite caracteres no compatibles.
// Correct:
"(01)03212345678906/(21)ABC123"
// Incorrect:
"03212345678906ABC123"
Problema 4: OutOfMemoryError con PDFs grandes
Respuesta: Aumente el heap de la JVM (-Xmx4G) y considere firmar páginas individualmente en lugar de usar setAllPages(true) para documentos muy grandes.
java -Xmx2G -jar your-application.jar
Problema 5: Fallo al escanear el código de barras
Respuesta: Asegúrese de que el código de barras tenga al menos 200 × 100 px, use colores de alto contraste y que no se distorsione por la compresión del PDF.
// Increase size
options.setWidth(400);
options.setHeight(150);
// Maximize contrast
options.setForeColor(Color.BLACK);
options.setBackgroundColor(Color.WHITE);
// Add quiet zone (blank space around barcode)
options.setMargin(new Padding(10));
Seguridad y validación
¿Son seguras las firmas de código de barras?
Un código de barras por sí solo no está protegido criptográficamente, por lo que cualquiera podría generar uno nuevo. Combínelo con una firma digital para garantizar tanto la autenticidad como la escaneabilidad. El patrón de firma dual (digital primero, código de barras después) le brinda aplicabilidad legal más conveniencia operativa.
Validación de datos del código de barras
Después de escanear, verifique que la firma digital del documento siga siendo válida y que la carga útil del código de barras coincida con los patrones esperados. Use la API search() de GroupDocs con BarcodeSearchOptions para extraer y validar automáticamente el contenido del código de barras.
public boolean validateScannedBarcode(String scannedData, String documentPath) {
// Verify digital signature first
if (!verifyDigitalSignature(documentPath)) {
return false;
}
// Validate barcode format
if (!scannedData.matches("(01)\\d{14}/(21)[A-Z0-9]+")) {
return false;
}
// Check against database
String productId = extractProductId(scannedData);
return database.productExists(productId);
}
Consideraciones de rendimiento
Gestión de recursos
Siempre libere los objetos Signature después de cada operación para evitar fugas de memoria:
signature.dispose();
Al procesar muchos archivos, cree y libere una nueva instancia de Signature por documento:
for (String filePath : documentPaths) {
Signature signature = null;
try {
signature = new Signature(filePath);
// ... signing logic ...
} finally {
if (signature != null) {
signature.dispose();
}
}
}
Procesamiento por lotes
Para lotes pequeños (< 100 archivos), el procesamiento secuencial es sencillo:
for (String path : paths) {
signDocument(path);
}
Para cargas de trabajo mayores, el procesamiento en paralelo puede acelerar las cosas — pero monitoree la presión de I/O y limite los hilos a 4‑8:
paths.parallelStream().forEach(path -> signDocument(path));
Optimización de memoria para PDFs grandes
Aumente el tamaño del heap, procese páginas individualmente y limpie referencias después de cada paso. Esto previene OutOfMemoryError en documentos mayores a 50 MB.
Cache de opciones de código de barras
Si reutiliza la misma configuración de código de barras en muchos archivos, almacene en caché la instancia BarcodeSignOptions:
// Create once, reuse many times
private static BarcodeSignOptions createStandardBarcodeOptions(String data) {
BarcodeSignOptions options = new BarcodeSignOptions(data);
options.setEncodeType(BarcodeTypes.GS1CompositeBar);
options.setTop(200);
options.setAllPages(true);
return options;
}
Funciones avanzadas
Múltiples firmas en un documento
Agregue varios códigos de barras (o mezcle con firmas digitales) llamando a sign múltiples veces con diferentes objetos de opciones:
// Add QR code in top-left
BarcodeSignOptions qrOptions = new BarcodeSignOptions("https://example.com");
qrOptions.setEncodeType(BarcodeTypes.QR);
qrOptions.setTop(50);
qrOptions.setLeft(50);
signature.sign(outputPath, qrOptions);
// Add GS1 barcode in bottom-right
BarcodeSignOptions gs1Options = new BarcodeSignOptions("(01)03212345678906");
gs1Options.setEncodeType(BarcodeTypes.GS1CompositeBar);
gs1Options.setTop(700);
gs1Options.setLeft(400);
signature.sign(outputPath, gs1Options);
Contenido dinámico del código de barras
Genere datos de código de barras a partir de metadatos del documento, marcas de tiempo o consultas a bases de datos:
// Extract data from PDF or database
String orderId = extractOrderIdFromPdf(filePath);
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME);
String barcodeData = String.format("ORDER:%s|TIME:%s", orderId, timestamp);
BarcodeSignOptions options = new BarcodeSignOptions(barcodeData);
Integración con Spring Boot
Exporte un endpoint REST que reciba un PDF, añada un código de barras y devuelva el archivo firmado:
@Service
public class DocumentSigningService {
public void signWithBarcode(MultipartFile file, String barcodeData) {
// ... implementation ...
}
}
Ejemplo de API REST
Un controlador mínimo que delega al servicio de firma:
@PostMapping("/sign-document")
public ResponseEntity<byte[]> signDocument(
@RequestParam("file") MultipartFile file,
@RequestParam("barcode") String barcodeData
) {
// Sign document and return as byte array
}
Preguntas frecuentes
Q: ¿Qué es un código de barras GS1CompositeBar?
A: Un GS1CompositeBar combina componentes lineales y 2D para almacenar IDs de producto, números de serie y otros datos en un solo símbolo escaneable, ampliamente usado en retail y logística.
Q: ¿Puedo usar otros tipos de códigos de barras además de GS1CompositeBar?
A: Sí — GroupDocs.Signature soporta más de 60 tipos, incluidos QR, Code128, DataMatrix, PDF417 y Aztec. Cambie el valor de setEncodeType() para cambiar el formato.
Q: ¿Necesito una licencia para uso en producción?
A: Se requiere una licencia válida de GroupDocs para despliegues en producción. Hay una prueba gratuita disponible para desarrollo y pruebas.
Q: ¿Los escáneres de códigos de barras leerán códigos de PDFs firmados?
A: Absolutamente, siempre que el código de barras tenga al menos 200 × 100 px y suficiente contraste. Las apps de escaneo en smartphones funcionan en pantalla; los escáneres de hardware funcionan en copias impresas.
Q: ¿Cómo manejo errores durante la firma?
A: Envuelva su código en bloques try‑catch, registre trazas completas de la pila y siempre llame a signature.dispose() en un bloque finally para liberar recursos.
Q: ¿Puedo firmar otros formatos de documento?
A: Sí — GroupDocs.Signature también soporta DOCX, XLSX, PPTX, imágenes y muchos más. Simplemente cambie la extensión del archivo de entrada; la API permanece igual.
Q: ¿Existen límites de tamaño de archivo?
A: No hay un límite estricto, pero documentos mayores a 50 MB pueden requerir un heap de JVM mayor y procesamiento página por página para mantener la eficiencia de memoria.
Q: ¿Cómo firmo PDFs almacenados en almacenamiento en la nube?
A: Descargue el archivo a una ruta local temporal, aplique la firma y luego vuelva a subirlo a su bucket en la nube. Elimine los archivos temporales después.
Conclusión
Ahora dispone de una guía completa y lista para producción sobre create barcode signature java para documentos PDF. Al combinar firmas digitales criptográficas con códigos de barras legibles por máquina, logra tanto la exigibilidad legal como la eficiencia operativa en casos de uso de cadena de suministro, salud, finanzas y manufactura. Experimente con diferentes tipos de códigos de barras, integre el código en sus servicios existentes y explore el procesamiento por lotes para despliegues a gran escala.
Last Updated: 2026-05-21
Tested With: GroupDocs.Signature 23.10 for Java
Author: GroupDocs
String filePath = "YOUR_DOCUMENT_DIRECTORY" + "/sample.pdf";
String fileName = new java.io.File(filePath).getName();
String outputPath = "YOUR_OUTPUT_DIRECTORY" + "/SignedWithBarcodeGS1CompositeBar/" + fileName;
String documentDir = System.getenv("DOCUMENT_DIR");
String outputDir = System.getenv("OUTPUT_DIR");
Signature signature = new Signature(filePath);