• Moderatore

    Stampa in flash "piccola"

    Ciao a tutti,
    ho un problema con una stampa in flash (innanzitutto premetto che è quasi due anni che non opero più con actionscript).
    Ho creato una gmap in flash con il componente afcomponent.
    Una volta caricata la mia bella cartina vorrei dar la possibilità di stamparla.
    Per stampare stampa, ma lo fa in dimensioni minuscole.
    Ho utilizzato print e printasbitmap ma nulla da fare, il risultato è sempre quello, mentre non ci capisco una mazza di come si usa il printjob.
    Qualcuno può aiutarmi?
    thank's
    :gthi:


  • User Attivo

    ciao criss. Non sono mai stato dilettante con le stampe in flash, ma a naso, per risolvere la questione, userei actionscript e le bitmapData (flash 8). Quindi attraverso questa classe, potresti fare uno "snapshot" dell'area da stampare, inserendo tale snapshot in un Movieclip creato dinamicamente, che potrai nascondere fuori dallo stage e a sua volta stampare.

    Questo codice tutorials potrà aiutarti

    /**
    Screenshot and jpg output
    **/
    import flash.display.BitmapData;
    import flash.geom.Matrix;
    
    //Buttons handlers. Should add an extra function because delegate doesn't allow to pass parameters
    shaF.onPress = mx.utils.Delegate.create(this,makeShadow);
    
    //Helper functions to pass parameters
    function makeShadow() { capture(0) }
    
    /*
    create a function that takes a snapshot of the Video object whenever it is called
    and shows in different clips
    */
    function capture(nr){
        this["snapshot"+nr] = new BitmapData(output_vid._width,output_vid._height); 
    
        //the bitmap object with no transformations applied
        this["snapshot"+nr].draw(output_vid,new Matrix());
        var t:MovieClip = createEmptyMovieClip("bitmap_mc"+nr,nr);
        
        //positions clip in correct place
        //t._x = 350; t._y = 10+(nr*130); t._xscale = t._yscale = 50
        
        //display the specified bitmap object inside the movie clip
        t.attachBitmap(this["snapshot"+nr],1);
    output(nr);
        //attachMovie("print_but", "bot"+nr, 100+nr, {_x:t._x+t._width+50, _y:t._y+t._height/2})    
    }
    //Create a new bitmapdata, resize it 50 %, pass image data to a server script
    // using a LoadVars object (large packet)
    function output(nr){
            //Here we will copy pixels data
            var pixels:Array = new Array()
            //Create a new BitmapData
            var snap = new BitmapData(this["snapshot"+nr].width, this["snapshot"+nr].height);   
            //Matrix to scale the new image
            myMatrix = new Matrix();
            myMatrix.scale(1, 1)
            
            //Copy image
            snap.draw(this["snapshot"+nr],  myMatrix);
    
            var w:Number = snap.width, tmp
            var h:Number = snap.height
            //Build pixels array
            for(var a=0; a<=w; a++){
                for(var b=0; b<=h; b++){
                    tmp = snap.getPixel32(a, b).toString(16)
                    pixels.push(tmp.substr(1))
                }
            }
            //Create the LoadVars object and pass data to PHP script
            var output:LoadVars = new LoadVars()
            output.img = pixels.toString()
            output.height = h
            output.width = w
            //The page (and this movie itself) should be in a server to work
            output.send("show.php", "output", "POST")            
    }
    stop()
    
    
    

    fonte codice:
    http://www.actionscript.it/forum/showpost.php?p=70653&postcount=5

    naturalmente l'output in questo caso viene spedito pixel x pixel a uno script PHP. a te basterà azionare un print del movieclip creato bitmap_mc.

    L'istanza per cui creerà il snapshot , si chiama nel codice output_vid quindi intuitivamente, la tua mappa dovrà chiamarsi output_vid o altro nome definito o sostituito nel codice

    Fammi sapere cosa ne pensi.


  • Moderatore

    Ciao Edo,
    ho risolto diversamente grazie...

    se a qualcuno dovesse interessare:

    var stampa:PrintJob = new PrintJob();
    var x:Number = map._xscale;
    var y:Number = map._yscale;
    map._xscale = 70;
    map._yscale = 70;
    stampa.start();
    stampa.addPage("map",{xMin:0, xMax:800, yMin:0, yMax:550},{printAsBitmap:true});
    map._xscale = x;
    map._yscale = y;
    stampa.send();
    

    Ho ridimensionato al 70% l'effettiva dimensione della mappa, l'ho stampata 800x550 come bitmap e l'ho poi riadattata alle dimensioni originali.

    ..era più facile di quanto pensassi..il problema sono i nuovi help di flash..poco chiari e senza esempi..:dull:

    ciao a tutti


  • User Attivo

    utile segnalazione. Non avevo mai usato prima printjob.:) A quanto pare è molto pratico e sbrigativo.