Sto cercando di stampare un JTable
e il metodo print()
funziona alla grande fino a quando non arrivo a questo scenario. Diciamo che voglio stampare prima, solo nella prima pagina (non nell’intestazione) il testo “Segnala” e alla fine nel testo “Questa è la fine del rapporto”. Vorrei ancora una volta chiarire che non ho bisogno di un’intestazione o di un piè di pagina solo che questo testo appaia nella parte superiore della prima e della parte inferiore dell’ultima pagina quando li stampo.
Come posso fare questo?
Un modo per farlo è append()
una serie di istanze di Printable
adatte a un java.awt.print.Book
, come mostrato qui .
Addendum: JTable
ha un metodo getPrintable()
che dovrebbe semplificare le cose; ecco un contorno e un semplice titolo Printable
:
PrinterJob pj = PrinterJob.getPrinterJob(); Book book = new Book(); book.append(new Title(), pj.defaultPage()); book.append(table.getPrintable(...), pj.defaultPage()); book.append(new EndPage(), pj.defaultPage()); pj.setPageable(book); pj.print(); ... private static class Title implements Printable { Font font = new Font("SansSerif", Font.PLAIN, 48); @Override public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException { Graphics2D g2d = (Graphics2D) g; g2d.translate(pf.getImageableX(), pf.getImageableY()); g2d.setFont(font); g2d.setColor(Color.black); g2d.drawString("Report", 50, 200); return Printable.PAGE_EXISTS; } }