title image


Smiley Re: Drucken in Java
Hallo Holger,





1.) Warum ist der druckbare Bereich so klein? Mit z.B. Word habe ich einen kleineren Rand beim Drucken, aber mit

Java ist das wirklich ein großer Rand. Wie kann ich den Rand kleiner stellen, wenn möglich?



Der Rand ist standardmäßig auf 1 Zoll = 2,54 cm eingestellt. Wo Java sich den Wert herholt, weiß ich leider auch nicht. In deinem genannten Beispielprogramm kannst du den Rand doch im pageDialog() ganz einfach verändern. Im folgenden printDialog() hast du sorgar nochmal die Möglichkeit, die Ränder zu ändern.



In meinen Anwendungen lese ich die Werte aus (über die Klasse Paper) und speichere sie in einem Properties-File, damit sie beim erneuten Start automatisch voreingestellt werden.



Hier ein wenig aus meinem Source:





// Variablen für die Drucker- und Seiteneinstellungen

private PrinterJob pjob;

private PageFormat pageformat;

private Paper seitenEinstellungen;

private String druckerName;





this.pjob = PrinterJob.getPrinterJob();

pageformat = pjob.defaultPage(); // Ein PageFormat-Object mit den Standard-Einstellungen wird beschafft

seitenEinstellungen = pageformat.getPaper();

if (einstellLesen()) {

pageformat.setPaper(seitenEinstellungen);

druckerVorgeben();

}





public boolean einstellLesen() {



try {

FileInputStream inStream = new FileInputStream("RechDruck.ini");

propEinstellungen.load(inStream);

inStream.close();

double papierHoehe = Double.parseDouble(propEinstellungen.getProperty("PapierHoehe", "841.6062992125984"));

double papierBreite = Double.parseDouble(propEinstellungen.getProperty("PapierBreite", "594.992125984252"));

double bedruckbareHoehe = Double.parseDouble(propEinstellungen.getProperty("bedruckbareHoehe", "697.6062992125984"));

double bedruckbareBreite = Double.parseDouble(propEinstellungen.getProperty("bedruckbareBreite", "450.99212598425197"));

double bedruckbarX = Double.parseDouble(propEinstellungen.getProperty("bedruckbarX", "72.0"));

double bedruckbarY = Double.parseDouble(propEinstellungen.getProperty("bedruckbarY", "72.0"));

int ausrichtung = Integer.parseInt(propEinstellungen.getProperty("Ausrichtung", "1"));

druckerName = propEinstellungen.getProperty("RechnDruckerName", "");

seitenEinstellungen.setSize(papierBreite, papierHoehe);

seitenEinstellungen.setImageableArea(bedruckbarX, bedruckbarY, bedruckbareBreite, bedruckbareHoehe);

pageformat.setOrientation(ausrichtung);

return true;

}

catch (IOException e) {

new MessageBox("Die Einstellungsdatei kann nicht gelesen werden !"

+ "\nin Klasse FA_RechnungGUI \n" + e );

return false;

}

}



public void einstellSpeichern() {



propEinstellungen.put("PapierHoehe", String.valueOf(seitenEinstellungen.getHeight()));

propEinstellungen.put("PapierBreite", String.valueOf(seitenEinstellungen.getWidth()));

propEinstellungen.put("bedruckbareHoehe", String.valueOf(seitenEinstellungen.getImageableHeight()));

propEinstellungen.put("bedruckbareBreite", String.valueOf(seitenEinstellungen.getImageableWidth()));

propEinstellungen.put("bedruckbarX", String.valueOf(seitenEinstellungen.getImageableX()));

propEinstellungen.put("bedruckbarY", String.valueOf(seitenEinstellungen.getImageableY()));

propEinstellungen.put("Ausrichtung", String.valueOf(pageformat.getOrientation()));

propEinstellungen.put("RechnDruckerName", pjob.getPrintService().getName());

try {

FileOutputStream outStream = new FileOutputStream("RechDruck.ini");

propEinstellungen.store(outStream,"Druckereinstellungen und Seitenformat (in FA_Printing)");

outStream.close();

}

catch (IOException e) {

new MessageBox("Fehler bim Speichern der Einstellungsdatei ! \nin Klasse FA_RechnungGUI\n"

+ e);

}

}









2.) Ich gebe ja absolute Werte ein, wo ich was positioniere. Wie sieht das bei anderen Druckern aus? wenn bei mir

z.B. der Druckbare Bereich bei 500 aufhören würde, ist das dann überall so oder muss ich das noch ausrechnen?



Es kommt natürlich immer auf das Papierformat und den Bereich an, den der Drucker bedrucken kann, an. Ein Nadeldrucker mit 12"-Papier bekommt mehr auf ein Blatt als ein Tintenstarhler mit DIN A 4-Papier. Aber das bekommst du ja über das Pageformat raus. Wenn du natürlich fest programmiert hast, das nach 500 Dots Schluss ist, dann ist das überall so. Dashalb würde ich das (vom Papier abhängig) berechnen.



Bisher mach ich das so:







("pf" ist eine Instanz der Klasse PageFormat)



//Seite ausgeben, Grafikkontext vorbereiten

Graphics2D g2 = (Graphics2D)g;

ypos = (int)pf.getImageableY() + 80;

xpos = (int)pf.getImageableX();

ymax = (int)pf.getImageableY() + (int)pf.getImageableHeight();

.

.

.

// Seitenwechsel vor Rechnungsbetrag prüfen

if (ypos+6*zeilenHoehe >= ymax) {

return (PAGE_EXISTS);

}







xpos und ypos werden während des Programmlaufs ständig neu berechnet. ymax ist die höchste Y-Druckposition.



Hoffe, ich habe mich verständlich ausgedrückt und konnte damit helfen.

Viele Grüße von

SunnyM



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: