Flash Builder を使ってActionScript 3 でアプリを開発する予定がある。
その中で、表示した内容を印刷する処理があるのだ。
実は今まで AS3 のアプリで印刷処理をしたことは無かった。
んが、PrintJob クラスを使えば「印刷するだけ」なら簡単に実装できそうである。
例えば、表示している画像を印刷する・・・という処理なら、下記のようなコードになる。
<!--?xml version="1.0" encoding="utf-8"?--><s:application xmlns:fx="http://ns.adobe.com/mxml/2009"xmlns:s="library://ns.adobe.com/flex/spark"xmlns:mx="library://ns.adobe.com/flex/mx"width="618" height="417" minwidth="955" minheight="600" backgroundcolor="#DBCAA7"><fx:script><!--[CDATA[import flash.printing.PrintJob;private function BasicPrintExample():void {var myPrintJob:PrintJob = new PrintJob();if (myPrintJob.start()) {try {myPrintJob.addPage(img1);}catch(e:Error) {}myPrintJob.send();}}]]--></fx:script><s:image id="img1" x="121" y="52" width="384" height="293" source="img/20120408_touring.JPG"><s:button id="btn1" x="274" y="23" label="印刷" click="BasicPrintExample()"></s:application>
簡単やねえ(^^;
ただ、ここで困った問題が発生。
実は、お客さんから「印刷部数を記録したい」という要望があったのである。つまり、「何枚印刷したか知りたい」ということである。
これも、デスクトップアプリケーション(AIR)で作れば簡単だ。
PrintJob クラスには、copies プロパティが存在するので、例えば上の例であれば、myPrintJob.send(); の前で、myPrintJob.copies の値を調べれば、印刷ダイヤログの「部数」のところで指定した値を知ることが出来る。
・・・が、今回は AIR ではなく Web アプリケーション(Flash)で・・・ということになっている。これが厳しい。
Flash の場合、AIR と違い(同じ AS3 で書かれていても)ローカル PC の情報は一切取れない。セキュリティ面からの実装だと思うが、そのため、copies プロパティ等も Flash として作成する Flex プロジェクトでは参照できない。定義されていないプロパティだと怒られてしまうのである。
つーことで、どうしても「印刷部数」をアプリケーション内で取りたければ AIR アプリで・・・ということになるな。