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;
}
}