Create PDF in runtime with Actionscript 3 (AlivePDF, Zinc or AIR, Flex or Flash)

This morning I’ve a new target, create PDF in runtime with Actionscript 3.
Very cool project to accomplished this mission is AlivePDF, an opensource AS3 library that you can download from Google Code.
AlivePDF allow you to generate PDF in runtime with Actionscript 3 and you can add pages, draw in each pages or add images, it’s very powerful library.

In this sample I use Actionscript 3 (with FDT) and Multidmedia Zinc 3, but you can use Flex or Flash and AIR to make this sample.
So first of all I create a simple class that allow you to create a PDF file with multiple pages and to add content in each pages.
This is the code:

package org.mart3.pdfGeneration {
    import flash.events.Event;    
    import flash.utils.ByteArray;    
    
    import org.alivepdf.images.ImageFormat;    
    import org.alivepdf.saving.Method;    
    
    import flash.display.Loader;    
    import flash.events.IEventDispatcher;    
    import flash.events.EventDispatcher;
    
    import org.alivepdf.pdf.PDF;
    import org.alivepdf.layout.Orientation;
    import org.alivepdf.layout.Size;
    import org.alivepdf.layout.Unit;
    import org.alivepdf.display.Display;
    
    /**
     * @author lm
     */
    public class CreatePDF extends EventDispatcher {
        
        private var pdf:PDF;
        public var pdfBA:ByteArray;
        
        public function CreatePDF(target : IEventDispatcher = null) {
            super(target);
            
            pdf = new PDF(Orientation.LANDSCAPE, Unit.MM, Size.A4);
            pdf.setDisplayMode(Display.FULL_PAGE);
        }
        
        public function set totalPages(num:int):void{
                
            for(var i:int = 0; i < num; i++){
            
                pdf.addPage();    
                
            }
    
        }
         public function setData(_l : Loader, _numPage:int) : void {
            
            pdf.gotoPage(_numPage);
            pdf.addImage(_l, 15, 15, 0, 0, ImageFormat.JPG, 100);
        }
        
        public function savePDF():void{
            pdfBA = new ByteArray();
            pdfBA = pdf.save(Method.LOCAL);
            
            var evt : Event = new Event("baReadyEvent");
            dispatchEvent(evt);
        }
    }
}

Obviously if you want, you can create a custom event that pass to the document class the ByteArray but this is a quick sample to show how you can create PDF in runtime!

One of the amazing things that you should do with AlivePDF, it’s that you can decide to save PDF locally or on web! Read documentation because it’s very interesting what you can do with this library!

Ok now, go to document class where we use MDM swc that you can find when install Zinc on your computer (you can find 2 differents SWC, one for Flash and the other one for Flex. Remeber also that Flash SWC works with Flash CS4 also, not only with Flash CS3!).
In this class we do those simple steps:

  • create a PDF object using CreatePDF object
  • set our PDF document
  • pass an external image loaded with Loader object
  • save PDF bytearray with Zinc FileSystem class
package org.mart3.pdfGeneration {

    import flash.display.MovieClip;    
    import flash.net.URLRequest;    
    import flash.display.Loader;    
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;

    import mdm.*;

    import org.mart3.pdfGeneration.*;

    /**
     * @author lm
     */
    public class Main extends Sprite {
    
        private var pdfObj:CreatePDF;
        private var l : Loader;
    
        public function Main() {
            
            mdm.Application.init(this);            
            
            pdfObj = new CreatePDF();
            pdfObj.totalPages = 2;
            pdfObj.addEventListener("baReadyEvent", saveLocalPDF);
            
            l =  new Loader();
            l.name = "myImg";
            
            l.contentLoaderInfo.addEventListener(Event.COMPLETE, showImage);
            l.load(new URLRequest(mdm.Application.path+"assets/bg.jpg"));
        }
        
        private function saveLocalPDF(e:Event) : void {
        
            mdm.FileSystem.BinaryFile.setDataBA(pdfObj.pdfBA);
            mdm.FileSystem.BinaryFile.writeDataBA(mdm.System.Paths.desktop+"generate.pdf");
    
        }

        private function showImage(event : Event) : void {
            
            l.scaleX = l.scaleY = .4;
            var mc : MovieClip = new MovieClip();
            mc.buttonMode = true;
            mc.addEventListener(MouseEvent.CLICK, savePDF);
            mc.addChild(l);
            this.addChild(mc);
        }
        
        private function savePDF(event : MouseEvent) : void {
            event.currentTarget.alpha = .5;
            pdfObj.setData(l, 1);
            pdfObj.savePDF();

            
        }
    }
}

You can also download source files from their hosting service and test it on your computer.
Feel free to give me any comments about AlivePDF, it’s very interesting to know what you think about this AS3 library.

I’m just come back from 3GSM World Congress

Here we are!
Yesterday I came back from Barcelona (what a wonderful city!), I was there for 3GSM World Congress invited from Adobe to show our latest Flash Lite contents made in collaboration with Mutado, an Italian creative and interactive company.
It was amazing for us and I’d like to thank you Adobe people to give us this opportunity, thank you guys!

Adobe stand was amazing I love it so much and also Adobe announced lots of new stuff from new Flash Lite player delivery to new challenge that allow developers to win $30.000!

Flash Lite challengers is a contest that will finish at the end of May and we’ll know winners in the middle of June.
Main prize is $30.000 for the best Flash Lite application, but there are also categories prizes from games to applications, it’s a great opportunity to show your mobile content and win!
More information about this challenge on Adobe site

Another great news is that now, we have a new way to distribute our Flash Lite contents, in fact if a device goes trough a Flash Lite content on the web browser or download a Flash Lite application, if this device doesn’t have installed Flash Lite 3.1, it will be downloaded from web and installed on the device.
More information about this new way to deliver your content on Labs site.  

Also Adobe and Nokia give us a new opportunity to invest in mobile projects with Open Screen Project fund ($10 million), in fact this fund is created to help companies and developers to join in mobile Flash world!
More information about it in open screen project site

Finally I put a review on mobile.actionscript.it about new Flash Lite devices like Palm Pre or Nokia N97, so feel free to comment it (and take a look about our new mobile website).

 If you want to see a quick tour about 3GSM feel free to take a look on my Flickr account.

3GSM World Congress 2009

Hi All,

it’s long time that I don’t write down a post.
In last months I changed lots of things, new fellows, new tutorials, new customers and big projects to develop with AIR and Flex.
So lots of things to do!

This year I’ll be at 3GSM World Congress for the second time, so if you will be there, please feel free to tell me, maybe you can drop me an email or add a comment under this post!
I’ll arrive at 15th and I’ll come back 20th February, so 5 amazing days in Barcelona.
If you don’t come, don’t worry I’ll post about this great event when I’ll be there and… there is a special surprise for anybody that follow this blog, so stay tuned and take a look at this blog in next few days.