Hi Glen,
This is quite similar to what we did. We first created a BitmapData of the
scene and then printed that. Even posted about it :-)
http://techblog.floorplanner.com/2008/10/22/printing-and-big-bitmaps/ But it
feels like there should be an easier way...

Gert-Jan

2008/10/25 Glen Pike <[EMAIL PROTECTED]>

> Hi,
>
>   Here is some AS2 code that I wrote to do this - the _toPrint is a
> MovieClip containing lots of stuff with filters on.  There is scaling too -
> depending on whether the user has chosen portrait or landscape - for later
> AS3 code, I worked out the orientation and rotated the printed image - not
> bitmapped though...
> The whole lot is rendered to a Bitmap, then printed.
>
>   Hope this helps.  I may even get round to blogging it one day :)
>
>   Glen
>
>   private function _print():Void {
>       //start a print job with the _toPrint...
>             // create PrintJob object
>       var my_pj:PrintJob = new PrintJob();
>
>       // display print dialog box, but only initiate the print job
>       // if start returns successfully.
>       if (my_pj.start()) {
>            // use a variable to track successful calls to addPage
>           var pagesToPrint:Number = 0;
>                     //we need to scale the object too!
>                     var h:Number = my_pj.pageHeight;
>           var w:Number = my_pj.pageWidth;
>                     var xs = w / _toPrint._width;
>           var ys = h / _toPrint._height;
>           trace("page dimensions " + w + ", " + h + " scale " + xs + ", " +
> ys + " to print " + _toPrint._xscale + ", " + _toPrint._yscale );
>                     var _printWidth:Number;
>           var _printHeight:Number;
>           var scale:Number = (xs < ys) ? xs : ys;
>           if (xs < ys) {
>               _printWidth = Math.floor(xs * _toPrint._width);
>               _printHeight = Math.floor(xs * _toPrint._height);
>           } else {
>               _printWidth = Math.floor(ys * _toPrint._width);
>               _printHeight = Math.floor(ys * _toPrint._height);
>           }
>           trace("to print " + _toPrint._xscale + ", " + _toPrint._yscale +
> " = " + _toPrint._width + ", " + _toPrint._height);
>                     // add specified area to print job
>           //now do our bitmap thingy..
>           var printedImg:MovieClip =
> this.createEmptyMovieClip("printedImg", this.getNextHighestDepth());
>           printedImg.beginFill(0xffffff, 1);
>           printedImg.moveTo(0, 0);
>           printedImg.lineTo(my_pj.pageWidth, 0);
>           printedImg.lineTo(my_pj.pageWidth, my_pj.pageHeight);
>           printedImg.lineTo(0, my_pj.pageHeight);
>           printedImg.lineTo(0, 0);
>           printedImg.endFill();
>           var printBmp:BitmapData = new BitmapData(my_pj.pageWidth,
> my_pj.pageHeight, false, 0xffffff);
>           printedImg.attachBitmap(printBmp, 1);
>           var mtx:Matrix =  new Matrix();
>           mtx.scale(scale, scale);
>           printBmp.draw(_toPrint, mtx);
>                     // repeat once for each page to be printed
>           if (my_pj.addPage(printedImg, null, {printAsBitmap:true})) {
>               pagesToPrint++;
>           }
>           _toPrint._xscale = _toPrint._yscale = 100;
>                     if (pagesToPrint > 0) {
>               my_pj.send();  // print page(s)
>           }
>           printBmp.dispose();
>           delete printBmp;
>           printedImg.unloadMovie();
>
>                 }
>
>   }
>
> Gert-Jan van der Wel wrote:
>
>> Hi Jim,
>>
>> Yeah we tried the printAsBitmap option, but it didn't make much of a
>> difference. We're now looking at creating a BitmapData and printing that.
>> Maybe that works.
>>
>> Gert-Jan
>>
>>
>> Op 24 okt 2008, om 15:17 heeft Jim McIntyre het volgende geschreven:
>>
>>  Gert-Jan van der Wel wrote:
>>>
>>>> Hi there,
>>>> We use filters (shadows and glows) to make the scene look better. At
>>>> some point a user can print what they've created, but the print shows no
>>>> filters. Is there an easy way to get the filters on the print?
>>>>
>>>
>>> Have you tried printAsBitmap? I found that was the only way to get some
>>> stuff to print the same way it was displayed, even when filters weren't
>>> involved (like some hand-drawn shadows using transparent fills).
>>>
>>> My project was written in AS2; I don't know whether the implications are
>>> different for code running in AVM2.
>>>
>>> (code simplified from my app, untested)
>>>
>>> --
>>>
>>> private function printPoster():Void {
>>>  var posterPrintJob:PrintJob = new PrintJob();
>>>  if (posterPrintJob.start()) {
>>>   var pgsQueued:Number = 0;
>>>   this.printPg._visible = true; //printPg is the MovieClip to print
>>>   var printArea:Object = {xMin:0, xMax:printPg._width, yMin:0,
>>> yMax:printPg._height};
>>>   var printOptions:Object = {printAsBitmap:true};
>>>   if (posterPrintJob.addPage('printPg', printArea, printOptions)) {
>>>     pgsQueued++;
>>>   }
>>>   if (pgsQueued) {
>>>     posterPrintJob.send();
>>>   }
>>>  }
>>> }
>>>
>>> --
>>> _______________________________________________
>>> Flashcoders mailing list
>>> Flashcoders@chattyfig.figleaf.com
>>> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>>>
>>
>> _______________________________________________
>> Flashcoders mailing list
>> Flashcoders@chattyfig.figleaf.com
>> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>>
>>
>>
> --
>
> Glen Pike
> 01326 218440
> www.glenpike.co.uk <http://www.glenpike.co.uk>
>
>
> _______________________________________________
> Flashcoders mailing list
> Flashcoders@chattyfig.figleaf.com
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>



-- 
Gert-Jan van der Wel
Co-Founder & CTO, Floorplanner.com

+31 (0)10 281 0799
+31 (0)6 1665 0338
[EMAIL PROTECTED]
http://www.floorplanner.com
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to