Einfach nur Text ausdrucken...

bassmicha

Grünschnabel
Hallo!
Ich versuche verzweifelt, einen Text auszudrucken. Der Text ist das Ergebnis einer Suche in einer XML-Datenstruktur und kann einige Seiten lang sein. Ich habe den Text in ein dyn. Textfeld eingelesen, das in einem separaten Movieclip liegt. Diesen Movieclip drucke ich dann mit dem PrintJob-Objekt aus. Das Ergebnis ist auf die Abmessungen des Movieclips beschränkt und maximal 1 Druckseite lang, der Rest wird abgeschnitten...
Wie überrede ich Flash MX 2004 Pro dazu, einfach nur den Text fortlaufend auf Papier zu bringen. Ich verzweifel gerade und hadere schon mit mir selbst, dass ich nicht Director genommen habe...;-)

Vielen dank für eure Tipps!
 
Hi,

Du wirst Dein Textfeld schon "per Hand" unterteilen müssen:

Lege Dir einen MovieClip mit einem mehrzeiligen Textfeld in der gewünschten Größe an (Instanzname des Textfeldes: ptext).

Folgender Code füllt nun das Textfeld Seitenweise und druckt einzelne Seiten aus. Die Funktion "findPrevSpace" sucht rückwärts das letzte Leerzeichen oder bricht nach einer bestimmten Anzahl Zeichen ab, wenn kein Leerzeichen gefunden wird:
PHP:
ptext.multiline = true;
ptext.autoSize = false;

function printOut(txt) {
	
	var ostr = txt;
	
	var job = new PrintJob();
	var ok = job.start();
	
	if (ok) {
			
		ptext.text = ostr;
		
		var snipped = true;
		
		while (snipped) {
			
			snipped = false;
			
			var snip = ostr.length - 1;
	
			while(ptext.textHeight > ptext._height) {
				snipped = true;
				snip = findPrevSpace(snip, ptext.text, 16);
				ptext.text = ostr.substr(0, snip);
			}
			
			var xm = this._width;
			var ym = this._height;

			job.addPage(this, {xMin:0,xMax:xm,yMin:0,yMax:ym},{printAsBitmap:false} );
	
			ostr = ostr.substr(snip);
			ptext.text = ostr;
		}
		
		job.send();
		delete job;
	}
}

function findPrevSpace(pos, txt, max) {
	var steps = 0;
	while(txt.substr(pos, 1) != " " && steps < max) {
		pos --;
		steps ++;
	}
	return pos;
}

Gruß
.
 
Zuletzt bearbeitet:
Mensch vielen Dank! Ein paar Modifizierungen und das Problem ist gelöst! Ein Frage noch: gibt's eine Möglichkeit, auf die Seitenränder des Ausdrucks Einfluss zu nehmen?
 
Soweit ich weiß nicht wirklich; Du kannst allerdings Deinen Inhalt nicht bei 0|0, sondern etwas weiter unten und rechts beginnnen lassen - bei verschiedenen Papiergrößen hast Du dann allerdings kaum eine Chance zur Einflussname. Mag sein, dass es doch eine elegantere Lösung gibt, aber mehr konnte ich der internen Referenz zur PrintJob-Klasse nicht entnehmen.

Gruß
.
 

Neue Beiträge

Zurück