February 15, 2008 1:59 PM
Printing the main HTML page of an HTML AIR application is quite easy
thanks to PrintJob. Sadly, the printing function familiar to
javascript developers window.print()
does not work in HTML AIR
applications. The sample that follows gives a replace for
window.print()
in about 22 lines of javascript.
function doPrintAir() { var pjob = new window.runtime.flash.printing.PrintJob; if ( pjob.start() ) { var poptions = new window.runtime.flash.printing.PrintJobOptions; poptions.printAsBitmap = true; try { pjob.addPage(window.htmlLoader, null, poptions); pjob.send(); } catch (err) { alert("exception: " + err); } } else { alert("PrintJob couldn't start"); } } //comment the line below if you do not want to mess with existing //window.print window.print = doPrintAir;
Code of a full HTML AIR application illustrating the use of the above code follows the screenshot:
print.html
(Main HTML file of the AIR application):
<html> <head> <title>AIR Print Test</title> <script src="AIRAliases.js" type="text/javascript"></script> <script src="printing-air.js" type="text/javascript"> </script> </head> <body style="border: 5px double grey;margin:20px 20px 20px 20px;background-color:#333;color:#fff;"> <div style="margin: 20px 20px 20px 20px;"> <h1> AIR - Printing from HTML / Javascript </h1> <p>Sample Text: The Sprite class is a basic display list building block: a display list node that can display graphics and can also contain children.</p> <p>A Sprite object is similar to a movie clip, but does not have a timeline. Sprite is an appropriate base class for objects that do not require timelines. For example, Sprite would be a logical base class for user interface (UI) components that typically do not use the timeline.This is lots of text</p> <p style="text-align:center;"> <!-- point to any png here --> <img src="deskworld.png" /> </p> <input type="button" value="Print" onClick="window.print()"/> <input type="button" value="Exit" onClick="window.nativeWindow.close()"/> </div> </body> </html>
printing-air.js
(Javascript file that contains the print function):
function doPrintAir() { var pjob = new window.runtime.flash.printing.PrintJob; if ( pjob.start() ) { var poptions = new window.runtime.flash.printing.PrintJobOptions; poptions.printAsBitmap = true; try { pjob.addPage(window.htmlLoader, null, poptions); pjob.send(); } catch (err) { alert("exception: " + err); } } else { alert("PrintJob couldn't start"); } } //comment the line below if you do not want to mess with existing //window.print window.print = doPrintAir;
AirApp-print.xml
(AIR application descriptor file):
<?xml version="1.0" encoding="UTF-8"?> <application xmlns="http://ns.adobe.com/air/application/1.0.M6"> <id>AirPrintApp</id> <filename>AirPrintApp</filename> <version>v1</version> <initialWindow> <content>print.html</content> <systemChrome>standard</systemChrome> <transparent>false</transparent> <visible>true</visible> <width>640</width> <height>575</height> </initialWindow> <name>AirPrintApp</name> </application>