WEAVE 05.09 – Flash-Seiten zum Mitnehmen

Flash zum Mitnehmen

flashpdf0509_550w

Das Online-Portfolio von Christian Bartsch ist nicht nur online schick – besuchte Seiten kann man sich auch zu einem individuellen PDF zusammenstellen und herunterladen. Martin Anderle programmierte die Funktion mit Hilfe der alivePDF-API und stellt hier eine abgespeckte Version des Quellcodes zur Verfügung.

package
{
	import br.com.stimuli.loading.*;

	import org.alivepdf.colors.CMYKColor;
	import org.alivepdf.fonts.*;
	import org.alivepdf.layout.*;
	import org.alivepdf.pdf.PDF;
	import org.alivepdf.saving.Method;

	import flash.display.Sprite;
	import flash.events.*;
	import flash.geom.Rectangle;
	import flash.net.FileReference;
	import flash.text.TextField;
	public class AlivePdfExamle extends Sprite
	{
		private var _pdf : PDF;
		private var _loader : BulkLoader;
		private var _header : String = "http://www.martinanderle.de/article/weavepdf/header.jpg
";
		private var _img1 : String = "http://www.martinanderle.de/article/weavepdf/christian_bartsch.jpg
";
		private var _img2 : String = "http://www.martinanderle.de/article/weavepdf/martin_anderle.jpg
";

		public function AlivePdfExamle()
		{
			loadImages();
		}

/**
 * Da wir mehrere Bilder laden ist der Einsatz des Bulkloaders sinnvoll,
 * weil dieser mehrere Dateien gleichzeitig laden kann, desweiteren
 * ist der Code übersichtlicher.
 * Die Bilder werden als ByteArray geladen, da wir beim Header
 * welcher aus Vektoren besteht 1200dpi und bei den Bildern 300dpi verwenden.
 */

		private function loadImages() : void
		{
			_loader = new BulkLoader("ImageLoader");
			_loader.addEventListener(BulkLoader.ERROR, loadError);
			_loader.addEventListener(BulkProgressEvent.PROGRESS, loadProgress);
			_loader.addEventListener(BulkLoader.COMPLETE, loadComplete);

			// Hinzufügen der Bilder zur Loading-Liste des BulkLoaders
			_loader.add(_header, {type:BulkLoader.TYPE_BINARY});
			_loader.add(_img1, {type:BulkLoader.TYPE_BINARY});
			_loader.add(_img2, {type:BulkLoader.TYPE_BINARY});

			// Starten des Loaders
			_loader.start();
		}

		private function loadError(event : Event) : void
		{
			trace("Wenn die Datei lokal ausgeführt wird, muss diese im Adobe Settings Manager zur Kommunikation mit dem Internet freigeschaltet werden.");
		}

		private function loadProgress(event : BulkProgressEvent) : void
		{
			trace("LOADING: ", Math.round(event.percentLoaded * 100));
		}

		private function loadComplete(event : Event) : void
		{
			trace("LOAD_COMPLETE");

			// PDF Objekt erzeugen und Seitenformat definieren, es ist auch möglich eigene Formate anzugeben.
			_pdf = new PDF(Orientation.LANDSCAPE, Unit.MM, Size.A4);

			firstPage();
			secondPage();

			// end() schließt das PDF-Dokument.
			_pdf.end();

			// Fügt einen Button auf der Bühne hinzu, dieser ist nötig, da aus Sichheitsgründen nur erlaubt ist den Flash Save-File Dialog innerhalb eines MouseEvents aufzurufen.
			addButton();
		}

		private function firstPage() : void
		{
			// PDF Seite hinzufügen
			_pdf.addPage();

			// Geladenes Bild hinzufügen, positionieren und Breite festlegen
			_pdf.addImageStream(_loader.getBinary(_header), 0, 0, 297);

			// Schrift Familie, Stil und Größe festlegen
			_pdf.setFont(FontFamily.ARIAL, Style.ITALIC, 123);

			// Text angeben sowie Position bestimmen
			_pdf.addText("weave", 20, 140);

			// Um beim nächsten Element die Schrift zu ändern, nochmals setFont() aufrufen und die Parameter ändern.
			_pdf.setFont(FontFamily.TIMES, Style.ITALIC, 26);
			_pdf.addText("pdf lookbook book example", 26, 151);

			// Wie bei der graphics Klasse von AS3 kann man hier Vektoren erzeugen, wir zeichnen hier ein einfaches Rechteck.
			_pdf.lineStyle(new CMYKColor(0, 0, 0, 0), 0);
			_pdf.beginFill(new CMYKColor(70, 1, 35, 0));

			_pdf.drawRect(new Rectangle(25, 158, 60, 10));

			// Mit textStyle() kann die Farbe des Textes geändert werden.
			_pdf.textStyle(new CMYKColor(0, 0, 0, 0));
			_pdf.setFont(FontFamily.ARIAL, Style.ITALIC, 18);
			_pdf.addText("www.gsenpod.com", 27, 165);

			// Um einen Link-Bereich zu definieren, Koordinaten, Höhe, Breite und den Link angeben.
			_pdf.addLink(25, 158, 60, 10, "http://www.gsenpod.com");
		}

		private function secondPage() : void
		{
			// PDF Seite hinzufügen
			_pdf.addPage();

			// Geladenes Bild hinzufügen, positionieren und Breite festlegen
			_pdf.addImageStream(_loader.getBinary(_header), 0, 0, 297);

			// Bilder hinzufügen, positionieren und Breite und Höhe angeben
			_pdf.addImageStream(_loader.getBinary(_img1), 12, 40, 135, 135);
			_pdf.addImageStream(_loader.getBinary(_img2), 150, 40, 135, 135);

			_pdf.textStyle(new CMYKColor(0, 0, 0, 100));

			_pdf.setFont(FontFamily.ARIAL, Style.ITALIC, 26);
			_pdf.addText("christian bartsch // martin anderle", 12, 192);
		}

/**
 * Speichern des PDF mittels der in Flash10 eingeführten FileReference Klasse.
 * Um Missbrauch zu verhindern, muss der Aufruf innerhalb eines MouseEvents erfolgen.
 */
		private function downloadPDF(event : MouseEvent) : void
		{
			new FileReference().save(_pdf.save(Method.LOCAL), "weave - pdf lookbook book example.pdf");
		}

		private function addButton() : void
		{
			var sprite : Sprite = new Sprite();
			sprite.addEventListener(MouseEvent.MOUSE_UP, downloadPDF);
			sprite.buttonMode = true;

			var textField : TextField = new TextField();
			textField.mouseEnabled = false;
			textField.text = "Get PDF";
			sprite.x = stage.stageWidth / 2;
			sprite.y = stage.stageHeight / 2;

			sprite.addChild(textField);
			addChild(sprite);
		}
	}
}
TwitterFacebookMister-WongDeliciousGoogle BookmarksIdenti.caShare