The Flex framework comes with several classes to assist you in printing; however, they don’t tend to produce the greatest results. The PrintDataGrid class is probably your best option when it comes to printing data, but whenever I’ve worked with it in the past I’ve always ended up disappointed. Even after formatting, there are always issues; like rows getting cut off and pages breaks in weird places.
There have been talks about AlivePDF offering a Grid class to the library, which may be interesting, but it hasn’t been released and would probably only handle DataGrid data. So the best option I’ve found for printing data is to allow a server to generate a PDF, which can then be sent back to Flex and output however you want.
A great benefit of this option is the ability to easily format the print results. You can use simple HTML and CSS to customize the printout much easier than you could using ActionScript. You can also add custom styles, letterheads, and footers to fit your needs.
Here Code:
private function generatePDF(pdfBinary:ByteArray, method:String):void{
//result comes back as binary, create a new URL request and pass it back to the server
var header:URLRequestHeader = new URLRequestHeader(“Content-type”, “application/octet-stream”);
var urlString:String = “http://kalengibbons.com/assets/pages/pdfCreator.cfm”;
if(method == “inline”)
urlString += “?method=inline”;
else
urlString += “?method=attachment&name=dataPrintSample.pdf”;
var sendRequest:URLRequest = new URLRequest(urlString);
sendRequest.requestHeaders.push(header);
sendRequest.method = URLRequestMethod.POST;
sendRequest.data = pdfBinary;
navigateToURL(sendRequest, “_blank”);
}
Save locally from Flash
private function savePDF(pdfBinary:ByteArray):void{
var fileRef:FileReference = new FileReference();
fileRef.save(pdfBinary, “yourPrintout.pdf”);
}