Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Impresion inmediata de codigo qr

Buenas tardes,
Estoy tratando de generar un código qr y que este se vaya directamente a la impresora (Uso una ticketera, las que usan en las tiendas para los comprobantes de pago), pero al momento de ejecutar el programa la hoja sale en blanco. En el programa lo que hago es usar itext para generar el codigo qr y enviarlo directamente a la impresora sin que se guarde el archivo pdf.
Por favor me pueden indicar si me falta agregar algo en la codificación o si existe alguna otra forma de imprimir un código qr directo a la impresora.
Este es el codigo que uso:

import java.io.FileOutputStream;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.BarcodeQRCode;
import com.itextpdf.text.Rectangle;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.swing.JOptionPane;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.printing.PDFPageable;

/**
*
* @author msalazar
*/
public class ImpresionInmediata {
//private final static Logger LOGGER = Logger.getLogger("proyprqr.ImpresionInmediata");

static public void main(String[] args) throws Exception {
ImpresionInmediata printer = new ImpresionInmediata();

printer.listarImpresoras();

// try {
ByteArrayOutputStream documentoBytes = printer.crearDocumentoiText();
printer.imprimir(documentoBytes);
// } //catch (IOException | PrinterException ex) {
// JOptionPane.showMessageDialog(null, "Error de impresion", "Error", JOptionPane.ERROR_MESSAGE);
// LOGGER.log(Level.SEVERE, null, ex);
// }
}

/**
* Envia a imprimir el ByteArrayOutoutStream creado de un documento iText
*
* @param documentoBytes
* @throws IOException
* @throws PrinterException
*/
public void imprimir(ByteArrayOutputStream documentoBytes) throws IOException, PrinterException {

// Aqui convertimos la el arreglo de salida a uno de entrada que podemos
// mandar a la impresora
ByteArrayInputStream bais = new ByteArrayInputStream(documentoBytes.toByteArray());

// Creamos un PDDocument con el arreglo de entrada que creamos
PDDocument document = PDDocument.load(bais);

PrintService myPrintService = this.findPrintService("GP-80220(Cut) Series");
PrinterJob printerJob = PrinterJob.getPrinterJob();

printerJob.setPageable(new PDFPageable(document));
printerJob.setPrintService(myPrintService);

printerJob.print();

}

/**
* Muestra en pantalla la lista de todas las impresoras disponibles en el
* sistema
*/
public void listarImpresoras() {
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
System.out.println("Lista de impresoras disponibles");

for (PrintService printService : printServices) {
System.out.println("\t" + printService.getName());
}
}

/**
* Nos regresa el PrintService que representa la impresora con el nombre que
* le indiquemos
* @param printerName nombre de la impresora que deseamos usar
* @return PrintService que representa la impresora que deseamos usar
*/
private PrintService findPrintService(String printerName) {
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
for (PrintService printService : printServices) {
System.out.println(printService.getName());

if (printService.getName().trim().equals(printerName)) {
return printService;
}
}
return null;
}

/**
* Crea un documento via la libreria iText y lo almacena como un
* ByteArrayOutputStream
*
* @return Documento iText en formato ByteArrayOutputStream
*/
public ByteArrayOutputStream crearDocumentoiText() throws Exception {
// Es en este ByteArrayOutputStream donde se pone el documento una vez
// que se llama a documento.close()
ByteArrayOutputStream documentoBytes = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(documentoBytes);
//PdfWriter pdfWriter = new PdfWriter(documentoBytes);
Document qr_code_Example = new Document(new Rectangle(100, 100));
// Step-2: Create PdfWriter object for the document
PdfWriter writer = PdfWriter.getInstance(qr_code_Example, ps);
// Step -3: Open document for editing
qr_code_Example.open();
//Step-4: Create New paragraph for QR Summary
//qr_code_Example.add(new Paragraph("Wow, we created a QR Code in PDF document using iText Java"));
//Step-5: Create QR Code by using BarcodeQRCode Class
BarcodeQRCode my_code = new BarcodeQRCode("Example QR Code Creation in Itext", 1, 1, null);
//Step-6: Get Image corresponding to the input string
Image qr_image = my_code.getImage();
//Step-7: Stamp the QR image into the PDF document
qr_code_Example.add(qr_image);
//Step-8: Close the PDF document
qr_code_Example.close();

return documentoBytes;
}


}

Gracias por las respuestas

julio 10, 2019 | Unregistered CommenterMiguel