Stampare in Java, PageFormat

di il
1 risposte

Stampare in Java, PageFormat

Salve a tutti,
dovrei stampare delle etichette su una stampante termica per etichette.
Per stampare uso "PrinterJob":

PrinterJob job = PrinterJob.getPrinterJob();

.
..
...
job.print();
La stampante però non stampa nulla perchè devo definire prima le dimensioni del foglio e poi centrare l'oggetto da stampare al centro della riga.
Le mie domande sono due:
1) Come posso definire le dimensioni del foglio? come si usa "PageFormat" ?

PageFormat pf = job.defaultPage();
Paper paper = pf.getPaper();  
2) Come posso centrare l'oggetto da stampare al centro della riga di stampa ?

Grazie.

1 Risposte

  • Re: Stampare in Java, PageFormat

    Se ti può servire come "base", questo è un esempio che ho scritto per stampare su un formato fisso (A5 nell'esempio) un testo posizionato in alto e centrato orizzontalmente.
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.font.TextLayout;
    import java.awt.print.PageFormat;
    import java.awt.print.Paper;
    import java.awt.print.Printable;
    import java.awt.print.PrinterException;
    import java.awt.print.PrinterJob;
    
    public class ProvaStampa {
        public static void main(String[] args) {
            // formato A5 (5.8 x 8.3 inch)
            double pageWidth = 5.8 * 72;
            double pageHeight = 8.3 * 72;
    
            Paper paper = new Paper();
            paper.setSize(pageWidth, pageHeight);
            paper.setImageableArea(0, 0, pageWidth, pageHeight);
    
            PageFormat pageFormat = new PageFormat();
            pageFormat.setPaper(paper);
    
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setPrintable(new PaginaDemo(), pageFormat);
    
            if (job.printDialog()) {
                try {
                     job.print();
                } catch (PrinterException ex) {
                    System.err.println(ex);
                }
            }
        }
    }
    
    class PaginaDemo implements Printable {
        @Override
        public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
            if (pageIndex > 0) {
                return NO_SUCH_PAGE;
            }
    
            String testo = "Prova di stampa";
            Font font = new Font("Arial", Font.PLAIN, 20);
    
            Graphics2D g2d = (Graphics2D) graphics;
            g2d.setFont(font);
            TextLayout layout = new TextLayout(testo, font, g2d.getFontRenderContext());
    
            float x = (float) (pageFormat.getImageableX() + (pageFormat.getImageableWidth() - layout.getAdvance()) / 2);
            float y = layout.getAscent();
    
            g2d.drawString(testo, x, y);
    
            return PAGE_EXISTS;
        }
    }
Devi accedere o registrarti per scrivere nel forum
1 risposte