WEAVE 05.09 – Flash-Seiten zum Mitnehmen

Flash zum Mitnehmen

Flashpdf0509 550w in WEAVE 05.09 – Flash-Seiten zum Mitnehmen

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
  1. {
  2.  import br.com.stimuli.loading.*;
  3.  
  4.  import org.alivepdf.colors.CMYKColor;
  5.  import org.alivepdf.fonts.*;
  6.  import org.alivepdf.layout.*;
  7.  import org.alivepdf.pdf.PDF;
  8.  import org.alivepdf.saving.Method;
  9.  
  10.  import flash.display.Sprite;
  11.  import flash.events.*;
  12.  import flash.geom.Rectangle;
  13.  import flash.net.FileReference;
  14.  import flash.text.TextField;
  15.  public class AlivePdfExamle extends Sprite
  16.  {
  17.   private var _pdf : PDF;
  18.   private var _loader : BulkLoader;
  19.   private var _header : String = "http://www.martinanderle.de/article/weavepdf/header.jpg
  20. ";
  21.   private var _img1 : String = "http://www.martinanderle.de/article/weavepdf/christian_bartsch.jpg
  22. ";
  23.   private var _img2 : String = "http://www.martinanderle.de/article/weavepdf/martin_anderle.jpg
  24. ";
  25.  
  26.   public function AlivePdfExamle()
  27.   {
  28.    loadImages();
  29.   }
  30.  
  31. /**
  32.  * Da wir mehrere Bilder laden ist der Einsatz des Bulkloaders sinnvoll,
  33.  * weil dieser mehrere Dateien gleichzeitig laden kann, desweiteren
  34.  * ist der Code übersichtlicher.
  35.  * Die Bilder werden als ByteArray geladen, da wir beim Header
  36.  * welcher aus Vektoren besteht 1200dpi und bei den Bildern 300dpi verwenden.
  37.  */
  38.  
  39.   private function loadImages() : void
  40.   {
  41.    _loader = new BulkLoader("ImageLoader");
  42.    _loader.addEventListener(BulkLoader.ERROR, loadError);
  43.    _loader.addEventListener(BulkProgressEvent.PROGRESS, loadProgress);
  44.    _loader.addEventListener(BulkLoader.COMPLETE, loadComplete);
  45.  
  46.    // Hinzufügen der Bilder zur Loading-Liste des BulkLoaders
  47.    _loader.add(_header, {type:BulkLoader.TYPE_BINARY});
  48.    _loader.add(_img1, {type:BulkLoader.TYPE_BINARY});
  49.    _loader.add(_img2, {type:BulkLoader.TYPE_BINARY});
  50.  
  51.    // Starten des Loaders
  52.    _loader.start();
  53.   }
  54.  
  55.   private function loadError(event : Event) : void
  56.   {
  57.    trace("Wenn die Datei lokal ausgeführt wird, muss diese im Adobe Settings Manager zur Kommunikation mit dem Internet freigeschaltet werden.");
  58.   }
  59.  
  60.   private function loadProgress(event : BulkProgressEvent) : void
  61.   {
  62.    trace("LOADING: ", Math.round(event.percentLoaded * 100));
  63.   }
  64.  
  65.   private function loadComplete(event : Event) : void
  66.   {
  67.    trace("LOAD_COMPLETE");
  68.  
  69.    // PDF Objekt erzeugen und Seitenformat definieren, es ist auch möglich eigene Formate anzugeben.
  70.    _pdf = new PDF(Orientation.LANDSCAPE, Unit.MM, Size.A4);
  71.  
  72.    firstPage();
  73.    secondPage();
  74.  
  75.    // end() schließt das PDF-Dokument.
  76.    _pdf.end();
  77.  
  78.    // 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.
  79.    addButton();
  80.   }
  81.  
  82.   private function firstPage() : void
  83.   {
  84.    // PDF Seite hinzufügen
  85.    _pdf.addPage();
  86.  
  87.    // Geladenes Bild hinzufügen, positionieren und Breite festlegen
  88.    _pdf.addImageStream(_loader.getBinary(_header), 0, 0, 297);
  89.  
  90.    // Schrift Familie, Stil und Größe festlegen
  91.    _pdf.setFont(FontFamily.ARIAL, Style.ITALIC, 123);
  92.  
  93.    // Text angeben sowie Position bestimmen
  94.    _pdf.addText("weave", 20, 140);
  95.  
  96.    // Um beim nächsten Element die Schrift zu ändern, nochmals setFont() aufrufen und die Parameter ändern.
  97.    _pdf.setFont(FontFamily.TIMES, Style.ITALIC, 26);
  98.    _pdf.addText("pdf lookbook book example", 26, 151);
  99.  
  100.    // Wie bei der graphics Klasse von AS3 kann man hier Vektoren erzeugen, wir zeichnen hier ein einfaches Rechteck.
  101.    _pdf.lineStyle(new CMYKColor(0, 0, 0, 0), 0);
  102.    _pdf.beginFill(new CMYKColor(70, 1, 35, 0));
  103.  
  104.    _pdf.drawRect(new Rectangle(25, 158, 60, 10));
  105.  
  106.    // Mit textStyle() kann die Farbe des Textes geändert werden.
  107.    _pdf.textStyle(new CMYKColor(0, 0, 0, 0));
  108.    _pdf.setFont(FontFamily.ARIAL, Style.ITALIC, 18);
  109.    _pdf.addText("www.gsenpod.com", 27, 165);
  110.  
  111.    // Um einen Link-Bereich zu definieren, Koordinaten, Höhe, Breite und den Link angeben.
  112.    _pdf.addLink(25, 158, 60, 10, "http://www.gsenpod.com");
  113.   }
  114.  
  115.   private function secondPage() : void
  116.   {
  117.    // PDF Seite hinzufügen
  118.    _pdf.addPage();
  119.  
  120.    // Geladenes Bild hinzufügen, positionieren und Breite festlegen
  121.    _pdf.addImageStream(_loader.getBinary(_header), 0, 0, 297);
  122.  
  123.    // Bilder hinzufügen, positionieren und Breite und Höhe angeben
  124.    _pdf.addImageStream(_loader.getBinary(_img1), 12, 40, 135, 135);
  125.    _pdf.addImageStream(_loader.getBinary(_img2), 150, 40, 135, 135);
  126.  
  127.    _pdf.textStyle(new CMYKColor(0, 0, 0, 100));
  128.  
  129.    _pdf.setFont(FontFamily.ARIAL, Style.ITALIC, 26);
  130.    _pdf.addText("christian bartsch // martin anderle", 12, 192);
  131.   }
  132.  
  133. /**
  134.  * Speichern des PDF mittels der in Flash10 eingeführten FileReference Klasse.
  135.  * Um Missbrauch zu verhindern, muss der Aufruf innerhalb eines MouseEvents erfolgen.
  136.  */
  137.   private function downloadPDF(event : MouseEvent) : void
  138.   {
  139.    new FileReference().save(_pdf.save(Method.LOCAL), "weave – pdf lookbook book example.pdf");
  140.   }
  141.  
  142.   private function addButton() : void
  143.   {
  144.    var sprite : Sprite = new Sprite();
  145.    sprite.addEventListener(MouseEvent.MOUSE_UP, downloadPDF);
  146.    sprite.buttonMode = true;
  147.  
  148.    var textField : TextField = new TextField();
  149.    textField.mouseEnabled = false;
  150.    textField.text = "Get PDF";
  151.    sprite.x = stage.stageWidth / 2;
  152.    sprite.y = stage.stageHeight / 2;
  153.  
  154.    sprite.addChild(textField);
  155.    addChild(sprite);
  156.   }
  157.  }
  158. }