Java - Impresion inmediata de codigo QR

 
Vista:

Impresion inmediata de codigo QR

Publicado por Miguel (2 intervenciones) el 10/07/2019 19:59:04
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder