Elegir una impresora programáticamente en Jasper Reports
Jasper Reports es, en mi opinión, uno de los mejores motores de informes disponibles para Java. ¡Es potente, flexible y de código abierto! La página oficial del proyecto ofrece amplia documentación para ayudarte a crear informes simples y avanzados. Para obtener orientación adicional, puedes comprar guías o soporte técnico de JasperSoft.
En esta publicación, exploraremos cómo elegir una impresora y imprimir informes programáticamente utilizando Jasper Reports. Veamos un ejemplo que demuestra cómo lograrlo.
public class JasperReportsPrinter {
public void printReport() {
// Fill the JasperPrint object with data
JasperPrint print = JasperFillManager.fillReport(
JasperReportsPrinter.class.getResource("/classpath/yourReport.jasper").getPath(),
new HashMap(), new YourReportDataSource());
PrinterJob job = PrinterJob.getPrinterJob();
// Retrieve available print services
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
int selectedService = 0;
// Find a print service by name that matches our criteria
for (int i = 0; i < services.length;i++) {
if (services[i].getName().toUpperCase().contains("Your printer's name")) {
// Select the first service that matches our criteria
selectedService = i;
break;
}
}
job.setPrintService(services[selectedService]);
// Set up print attributes
PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
printRequestAttributeSet.add(MediaSize.findMedia(4, 4, MediaPrintableArea.INCH));
printRequestAttributeSet.add(new Copies(1));
// Configure the JRPrintServiceExporter
JRPrintServiceExporter exporter = new JRPrintServiceExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
/* We set the selected service and pass it as a parameter */
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE,
services[selectedService]);
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET,
services[selectedService].getAttributes());
exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET,
printRequestAttributeSet);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG,
Boolean.FALSE);
exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG,
Boolean.TRUE);
// Export the report to the printer
exporter.exportReport();
}
}
Puntos clave
- Generar el objeto JasperPrint:
El objetoJasperPrint
es la representación central de tu informe rellenado. Este paso implica proporcionar la ruta al archivo.jasper
y pasar la fuente de datos requerida. - Recuperar la lista de impresoras disponibles:
UtilizaPrintServiceLookup.lookupPrintServices()
para obtener la lista de impresoras disponibles. Luego puedes iterar a través de la lista para encontrar una impresora por nombre. - Configurar los atributos de impresión:
UtilizaPrintRequestAttributeSet
para establecer atributos como el tamaño del papel (por ejemplo, A4) y el número de copias. - Configurar el exportador:
ElJRPrintServiceExporter
se configura con el servicio de impresión seleccionado y los atributos. Maneja la comunicación real con la impresora. - Iniciar la impresión:
El métodoexportReport()
envía el informe a la impresora. Opcionalmente, puedes suprimir los cuadros de diálogo de impresión y página.
Conclusión
Con el código anterior, puedes elegir eficientemente una impresora programáticamente e imprimir informes utilizando Jasper Reports. Este enfoque no solo agiliza el proceso de impresión, sino que también proporciona la flexibilidad para personalizar la configuración de la impresora dinámicamente. Ya estés desarrollando aplicaciones empresariales o proyectos a pequeña escala, este método garantiza una integración perfecta con tus flujos de trabajo de impresión.