I'm too new to
Java to know how to print athe content of a JTextArea, so I hope you'll help me. What I would like to do is printing what is inside a JTextArea exactly as if it was a Wor document. That means more than a page, lines printed correctly and so on. I don't need to print images. I'm actually using this code:
void Stampare(){
PrinterJob printJob = PrinterJob.getPrinterJob();
Book book = new Book();
PageFormat documentPageFormat = new PageFormat();
//documentPageFormat.setOrientation(PageFormat.LANDSCAPE);
documentPageFormat.setOrientation(PageFormat.PORTRAIT);
book.append(new Document(), documentPageFormat);
printJob.setPageable(book);
if (printJob.printDialog()) {
try {
printJob.print();
}
catch (Exception PrintException){
PrintException.printStackTrace();
}
}
}
public class Document implements Printable {
private final static int POINTS_PER_INCH = 72;
public int print (Graphics g, PageFormat pageFormat, int page) {
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
g2d.setPaint(Color.black);
g2d.setStroke(new BasicStroke (4));
Rectangle2D.Double border = new Rectangle2D.Double (0, 0, pageFormat.getImageableWidth (), pageFormat.getImageableHeight ());
//g2d.draw(border);
//String text = new
String ("Kalle");
String text = new String(areaStampa.getText());
Point2D.Double pen = new Point2D.Double(0.25 * POINTS_PER_INCH, 0.25 * POINTS_PER_INCH);
double width = 7.5 * POINTS_PER_INCH;
AttributedString paragraphText = new AttributedString(text);
paragraphText.addAttribute(TextAttribute.FONT, new Font("serif", Font.PLAIN, 12));
LineBreakMeasurer lineBreaker = new LineBreakMeasurer(paragraphText.getIterator(), new FontRenderContext(null, true, true));
TextLayout layout;
while ((layout = lineBreaker.nextLayout((float) width)) != null){
pen.y += layout.getAscent();
layout.draw(g2d, (float) pen.x, (float) pen.y);
pen.y += layout.getDescent() + layout.getLeading();
}
return (PAGE_EXISTS);
}
}
This code doesn't work properly. First of all I get errors about security things that I don't even understand. Secondly, it prints all the lines one after the other, without carriage returns (hope you understood this!
). Moreover, some letters are not printed, as if they were outside the printing area.
Can you please help me finding a solution?
Thanks a lot,
Giorgio