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