Suche Methode zum ausdrucken eines Strings

StefanG

Aktives Mitglied
Hallo,

nach dem durchsuchen von vielen verschiedenen Google und Foren Einträgen bin ich leider nicht zum gewünschten Ziel gekommen.

Ich suche eine Methode mit der ich einen String ausdrucken kann.

- es soll sich der Standard Windows "Drucken" Dialog öffnen, in dem man den Drucker und Anzahl Seiten auswählen kann

- der String sollte an das vorgegebene Format "A4" angepasst werden

Hat jemand einen Tipp?
 
Ich höre zum ersten Mal, dass jemand direkt über Konsole einen String in A4 formatiert ausdrucken möchte. Wie bearbeitest du denn diesen String? Und wenn er so klein ist, dass er in einer Konsolenanwendung bearbeitet werden kann... Lohnt es sich denn?

Ich würd dir empfehlen mach doch eine GUI mit einer Textbox, wo dein String drin Platz findet und viel cooler bearbeitet werden kann. Dann hilft dir dieses Tutorial auch weiter:

Drucken mit Java
 
jede Art von Drucken mit Java hört man hier nur alle Jubeljahre,
aber wenn dann würde ich auch mit einem einfachen String anfangen, doch nicht komplizierte GUI,

wenn ich einen angeschlossenen Drucker teste öffne ich auch einen einfachen Editor und tippe 'Test' ein,
nicht ein Office-Programm mit fettgedruckter Sonderschriftart..
 
Bei meinem Programm handelt es sich um einen einfachen Editor für txt-Dateien.

Die GUI ist vergleichbar mit der von Notepad.

Der String beinhaltet den Dateiinhalt aus einer txt-Datei, wird in einer JTextArea angezeigt und kann bearbeitet werden.

Diesen Inhalt aus der JTextArea möchte ich nun an den Drucker senden und ausdrucken.
 
Java:
	void print() {
		PrintJob prjob = getToolkit().getPrintJob(this,
				"Editor", null);
		if (null != prjob) {
			final int iPageResol = prjob.getPageResolution();
			Graphics pg = prjob.getGraphics();
			if (null != pg && 0 < iPageResol) {
				int iAddY = 20;
				int iRand = (int) Math.round(iPageResol * 2. / 2.54); // 2 cm
				// Rand
				int iPosX = iRand + iRand / 4; // Textposition
				int iPosY = iPosX - iAddY / 2;
				pg.setFont(new Font("SansSerif", Font.PLAIN, iAddY * 2 / 3));
				pg.drawString(this.getString(), iPosX,
						iPosY += iAddY);
				pg.dispose();
			}
			prjob.end();
		}
	}


Habe mir jetzt erstmal meine print Methode zusammengebaut. Doch leider wird ein zu langer String am Seitenende abgebrochen. Wie könnte man einen automatischen Zeilenumbruch implementieren, der einen zu langen String entsprechend der Seitenbreite aufteilt?
 
Java Tips - How to obtain FontMetrics of different fonts

FontMetrics.stringWitdh(),
String nach Leerzeichen oder sonstigen Trennmöglichen absuchen,
auseinander nehmen, mit einem Erfahrungswert für maximale Breite vergleichen,
einzeln malen oder mit \n zusammenfügen,

tja, wenn man schon bei einem einzelnen String ist, dann hat man auch die ganze Arbeit damit 😉
 
hm wissen wielang er sein kann und einen \n dazwischenbauen? Ich nehme an das der drucker dann auch einen umbruch druckt, hab das nie gemacht.
 
Die Schwierigkeit ist halt dass der String bis zu 1000 Zeichen haben kann.

Wenn ich meinen String vorher mit Zeilenümbrüchen ergänze, werden diese dann automatisch beim drucken mitinterpretiert oder kann das zu Fehlern führen? Wäre das ein Lösungsansatz?

String textausgabe = "texttexttexttexttexttexttexttext \r\n texttexttexttexttexttexttexttext"
 
Also in meinem FAQ Bsp wird beides berücksichtigt 😉
Einfach mal ausprobieren und halt als PDF drucken lassen (beim Drucker halt PDF auswählen oder Fineprint/pdfFactory installieren).
 
Bin leider mit meinem Problem nicht weiter gekommen, da Zeilenumbrüche nicht interpretiert werden.

Werde das ganze so handhaben, dass ich eine temporäre *.txt Datei generiere und diese dann ausdrucken lasse.

StreamPrintServices unterstützt doch txt-Dateien, oder muss ich irgendetwas beachten?
 
ansonsten trenne die Strings selber auf, string.split("\n");
und male sie in einer Schleife untereinander, FontMetrics kann dir auch helfen, die Zeilenhöhe zu bestimmen,
falls es nicht einfacher ist da 20 Pixel oder so vorzugeben, du hast ja schon
> int iAddY = 20;
 

Zurück
Oben