Foros del Web » Programación para mayores de 30 ;) » Java »

Impresión inmediata de código qr

Estas en el tema de Impresión inmediata de código qr en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 10/07/2019, 11:38
 
Fecha de Ingreso: mayo-2010
Mensajes: 33
Antigüedad: 9 años, 3 meses
Puntos: 3
Impresión inmediata de código 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();


}

/**
* 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);

Document qr_code_Example = new Document(new Rectangle(100, 100));

PdfWriter writer = PdfWriter.getInstance(qr_code_Example, ps);

qr_code_Example.open();

BarcodeQRCode my_code = new BarcodeQRCode("Example QR Code Creation in Itext", 1, 1, null);

Image qr_image = my_code.getImage();

qr_code_Example.add(qr_image);

qr_code_Example.close();

return documentoBytes;
}


}

Gracias por las respuestas

Última edición por kyubi22; 10/07/2019 a las 11:58



La zona horaria es GMT -6. Ahora son las 21:08.