Hallo Leute,
ich habe folgendes Problem und hoffe, daß sich irgendwer erbarmt mir zu helfen....
Ich versuche eine JTextArea zu drucken. Hier meine erste Lösung:
Toolkit tk = Toolkit.getDefaultToolkit();
PrintJob pj = tk.getPrintJob(fenster, "Druckertest", null);
if(pj != null) {
Graphics g = pj.getGraphics();
textfeld.print(g);
g.dispose();
pj.end();
Das ganze funktioniert auch super, aber damit gibts natürlich keine Formatierung und der Text wird auf die ganze Seite verteilt (also auch am Rand, der nicht bedruckbar ist).
Ich habe danach folgenden Lösungsansatz erarbeitet, weiß aber nicht wie ich mit der TextArea umgehen soll. Es wäre super wenn mir jemand helfen kann!
class Drucken implements Printable{
private static final int SKALIERFAKTOR = 4;
private PrinterJob pjob;
private PageFormat seitenFormat;
private String druckText;
private JTextArea textfeld;
//Konstruktor
public Drucken(String druckText, JTextArea textfeld) {
this.pjob = PrinterJob.getPrinterJob();
this.druckText = druckText;
this.textfeld = textfeld;
}
public boolean setupPageFormat() {
PageFormat defaultPF = pjob.defaultPage();
this.seitenFormat = pjob.pageDialog(defaultPF);
pjob.setPrintable(this, this.seitenFormat);
return (this.seitenFormat != defaultPF);
}
public boolean setupJobOptions() {
return pjob.printDialog();
}
public void drucke() throws PrinterException, IOException {
pjob.print();
}
public int print(Graphics g, PageFormat pf, int page) throws
PrinterException {
int druckErgeb = PAGE_EXISTS;
if (page > 1)return NO_SUCH_PAGE;
String line = null;
Graphics2D g2 = (Graphics2D) g;
g2.scale(1.0 / SKALIERFAKTOR, 1.0 / SKALIERFAKTOR);
int ypos = (int) pf.getImageableY() * SKALIERFAKTOR;
int xpos = ((int) pf.getImageableX() + 2) * SKALIERFAKTOR;
int yd = 12 * SKALIERFAKTOR;
int ymax = ypos + (int) pf.getImageableHeight() * SKALIERFAKTOR - yd;
ypos += yd;
g2.setColor(Color.black);
g2.setFont(new Font("Monospaced", Font.ITALIC, 12 * SKALIERFAKTOR));
textfeld.print(g2); // Klappt natürlich so nicht, aber wie
//g.drawString("Seite " + (page + 1), xpos, ypos);
//g.drawString(druckText, xpos, ypos * 2);
// Erneuter Aufruf von print()
return druckErgeb;
}
}
das ganze wird von der ActionPerformed Methode wie folgt aufgerufen:
Drucken d = new Drucken("Hallo Welt", textfeld);
if (d.setupPageFormat()) {
if (d.setupJobOptions()) {
try {
d.drucke();
}
catch (Exception ex) {
System.err.println(e.toString());
System.exit(1);
}
System.exit(0);
}
}
Wäre echt nett, wenn mir jemand was dazu schreiben könnte
Danke im Voraus
Gruß
bdik
ich habe folgendes Problem und hoffe, daß sich irgendwer erbarmt mir zu helfen....
Ich versuche eine JTextArea zu drucken. Hier meine erste Lösung:
Toolkit tk = Toolkit.getDefaultToolkit();
PrintJob pj = tk.getPrintJob(fenster, "Druckertest", null);
if(pj != null) {
Graphics g = pj.getGraphics();
textfeld.print(g);
g.dispose();
pj.end();
Das ganze funktioniert auch super, aber damit gibts natürlich keine Formatierung und der Text wird auf die ganze Seite verteilt (also auch am Rand, der nicht bedruckbar ist).
Ich habe danach folgenden Lösungsansatz erarbeitet, weiß aber nicht wie ich mit der TextArea umgehen soll. Es wäre super wenn mir jemand helfen kann!
class Drucken implements Printable{
private static final int SKALIERFAKTOR = 4;
private PrinterJob pjob;
private PageFormat seitenFormat;
private String druckText;
private JTextArea textfeld;
//Konstruktor
public Drucken(String druckText, JTextArea textfeld) {
this.pjob = PrinterJob.getPrinterJob();
this.druckText = druckText;
this.textfeld = textfeld;
}
public boolean setupPageFormat() {
PageFormat defaultPF = pjob.defaultPage();
this.seitenFormat = pjob.pageDialog(defaultPF);
pjob.setPrintable(this, this.seitenFormat);
return (this.seitenFormat != defaultPF);
}
public boolean setupJobOptions() {
return pjob.printDialog();
}
public void drucke() throws PrinterException, IOException {
pjob.print();
}
public int print(Graphics g, PageFormat pf, int page) throws
PrinterException {
int druckErgeb = PAGE_EXISTS;
if (page > 1)return NO_SUCH_PAGE;
String line = null;
Graphics2D g2 = (Graphics2D) g;
g2.scale(1.0 / SKALIERFAKTOR, 1.0 / SKALIERFAKTOR);
int ypos = (int) pf.getImageableY() * SKALIERFAKTOR;
int xpos = ((int) pf.getImageableX() + 2) * SKALIERFAKTOR;
int yd = 12 * SKALIERFAKTOR;
int ymax = ypos + (int) pf.getImageableHeight() * SKALIERFAKTOR - yd;
ypos += yd;
g2.setColor(Color.black);
g2.setFont(new Font("Monospaced", Font.ITALIC, 12 * SKALIERFAKTOR));
textfeld.print(g2); // Klappt natürlich so nicht, aber wie
//g.drawString("Seite " + (page + 1), xpos, ypos);
//g.drawString(druckText, xpos, ypos * 2);
// Erneuter Aufruf von print()
return druckErgeb;
}
}
das ganze wird von der ActionPerformed Methode wie folgt aufgerufen:
Drucken d = new Drucken("Hallo Welt", textfeld);
if (d.setupPageFormat()) {
if (d.setupJobOptions()) {
try {
d.drucke();
}
catch (Exception ex) {
System.err.println(e.toString());
System.exit(1);
}
System.exit(0);
}
}
Wäre echt nett, wenn mir jemand was dazu schreiben könnte
Danke im Voraus
Gruß
bdik