Duckemai
Mitglied
Hallo zusammen,
stehe derzeit mit einem etwas verzwicktem Problem auf dem Schlauch. Vielleicht kennt sich jemand besser mit den Druckfunktionen unter Java aus als ich. Mein Problem ist, dass ich ein JTextArea ausdrucken möchte. Das funktioniert auch (s. Quelltext unten). Aber: Da das JTextArea breiter ist als eine DinA 4 Seite, verschluckt das Programm den Text einer zu langen Zeile und druckt nur den Anfang aus. Das Ende der Zeile wird nicht gedruckt. Ich bräuchte so etwas, dass das Programm die Seitenbreite erkennt und dann einen wortgerechten (also nicht mitten im Wort) Umbruch schafft. Event. geht das mit: getImageableWidth() ?
Vielen Dank für jeden hilfreichen Ansatz:
public class PrintSuit implements Printable
{
private Component compToPrint;
//comp = Parameter für das JTextArea
public static void printComponent(Component comp)
{
new PrintSuit(comp).print();
}
PrintSuit(Component comp)
{
this.compToPrint = comp;
}
public void print()
{
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(this);
PageFormat pf = new PageFormat();
printJob.pageDialog(pf);
if (printJob.printDialog())
try {
printJob.print();
} catch(PrinterException pex) {
pex.printStackTrace();
}
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
{
//double breite = (pageFormat.getImageableWidth() - 300); ?
if (pageIndex > 0)
{
return(NO_SUCH_PAGE);
} else
{ //Bestimmung der linken oberen Ecke
int x = (int)pageFormat.getImageableX() + 1;
int y = (int)pageFormat.getImageableY() + 1;
g.translate(x,y);
//Buffer für besseren Druck ausschalten
RepaintManager currentManager = RepaintManager.currentManager(compToPrint);
currentManager.setDoubleBufferingEnabled(false);
compToPrint.paint(g);
currentManager.setDoubleBufferingEnabled(true);
return(PAGE_EXISTS);
}
}//print Graphics
}//class
stehe derzeit mit einem etwas verzwicktem Problem auf dem Schlauch. Vielleicht kennt sich jemand besser mit den Druckfunktionen unter Java aus als ich. Mein Problem ist, dass ich ein JTextArea ausdrucken möchte. Das funktioniert auch (s. Quelltext unten). Aber: Da das JTextArea breiter ist als eine DinA 4 Seite, verschluckt das Programm den Text einer zu langen Zeile und druckt nur den Anfang aus. Das Ende der Zeile wird nicht gedruckt. Ich bräuchte so etwas, dass das Programm die Seitenbreite erkennt und dann einen wortgerechten (also nicht mitten im Wort) Umbruch schafft. Event. geht das mit: getImageableWidth() ?
Vielen Dank für jeden hilfreichen Ansatz:
public class PrintSuit implements Printable
{
private Component compToPrint;
//comp = Parameter für das JTextArea
public static void printComponent(Component comp)
{
new PrintSuit(comp).print();
}
PrintSuit(Component comp)
{
this.compToPrint = comp;
}
public void print()
{
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintable(this);
PageFormat pf = new PageFormat();
printJob.pageDialog(pf);
if (printJob.printDialog())
try {
printJob.print();
} catch(PrinterException pex) {
pex.printStackTrace();
}
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
{
//double breite = (pageFormat.getImageableWidth() - 300); ?
if (pageIndex > 0)
{
return(NO_SUCH_PAGE);
} else
{ //Bestimmung der linken oberen Ecke
int x = (int)pageFormat.getImageableX() + 1;
int y = (int)pageFormat.getImageableY() + 1;
g.translate(x,y);
//Buffer für besseren Druck ausschalten
RepaintManager currentManager = RepaintManager.currentManager(compToPrint);
currentManager.setDoubleBufferingEnabled(false);
compToPrint.paint(g);
currentManager.setDoubleBufferingEnabled(true);
return(PAGE_EXISTS);
}
}//print Graphics
}//class