I had the same issue today. I am shocked (shocked!) that Adobe won't let you do such a simple thing as print the stage. I chose to simple create a bitmap image from the stage instance, add it to the application instance, and then print that. I think this is simpler than trying to wrap things in yet another component, mess with layout, etc. Since you have just one image for the entire screen, you need only bother with positioning this one image. If you use absolute layout, no positioning should even be necessary. It will just perfectly overlap your actual contents. Print the application instance. Remove the bitmap's container instance and you're done.
Now, it might be possible to use PrintJob and instead of FlexPrintJob to print the stage with fewer lines of code but I don't believe the stage instance is a Sprite, so regardless, something like the following is necessary.
This method assumes "this" is the application.
private function printScreen():void {
var printJob:FlexPrintJob = new FlexPrintJob();
if (printJob.start()) {
var bitmapData:BitmapData = new BitmapData(stage.width, stage.height, false);
bitmapData.draw(stage);
var bitmap:FlexBitmap = new FlexBitmap(bitmapData);
//Wrap the bitmap into a class that can be added to the framework display list.
//I chose mx:Image arbitrarily.
//Really, anything will do as long as it is an IVisualElement
//Note that the application's layout is absolute so this image gets
//temporarily added on top of the actual application's elements.
var image:Image = new Image();
image.source = bitmap;
addElement(image);
printJob.addObject(this);
removeElement(image);
}
// Send the job to the printer.
printJob.send();
}
There is only one limitation I can think of to this approach. That is flash's maximum bitmap image size constraint. But for up to an HD monitor, I think there is no problem.