作成日

19 October 2010

その他の必要条件

  • Adobe AIR SDK 2.0
  • Flash Builder 4.0.1もしくはFlash Professional CS5
2010年6月9日にAdobe AIR 2がリリースされました。約2年半振りのメジャーバージョンアップとなり、多くの新機能追加と機能強化が行われています。本連載(全9回予定)では、 それら機能について詳しく説明するとともに、サンプルアプリを用いながらその使い方を解説していきます。

第1回 Adobe AIR 2をはじめよう
第2回 サーバーソケット/ データグラムソケットなどのネットワーク系機能
第3回 Safari 4.0.3 と同等の WebKit を搭載
第4回 プリンタ情報の取得や印刷ダイアログの制御
第5回 OSネイティブな機能との連携
第6回 OSネイティブとの統合
第7回 グローバルエラーハンドラー/IMEテキスト入力の機能強化

本記事では、Adobe AIR 2で強化された印刷機能について紹介します。Adobe AIR 2では印刷機能が大幅に強化されており、その中でも重要な機能について、APIの解説とサンプルを交えながら解説します。

本記事のサンプル:AIR2master04sample.zip

新機能について

Adobe AIR バージョン1に搭載されていた印刷機能では、ActionScriptを使って柔軟な操作ができませんでした。また、印刷する場合は、OSの印刷ダイアログから印刷を行う必要がありました。Adobe AIR 2では以下に挙げた印刷機能が追加され、前バージョンでは不可能だった、プリンタ情報の取得や印刷ダイアログの制御などが行えるようになっています。

  • ダイアログの制御
  • プリンタの一覧と指定
  • 用紙サイズの指定
  • 印刷範囲の指定
  • 印刷方法の指定
  • 印刷ジョブのプロパティの取得

通常の案件では印刷機能を細かく制御する必要はないかもしれませんが、行政や物流などで紙の出力が必要なシステムの場合、「印刷設定ダイアログを出さないで印刷する」といったように印刷を制御する必要があります。また、Flash Media Serverなどでデータプッシュされたら自動印刷するFAXのようなアプリといった使い方もできるでしょう。

それでは、個々の機能について詳しく解説していきましょう。

ダイアログの制御

Adobe AIR 1は、PrintJobクラスのstartメソッドを使って印刷処理を開始する際に必ず印刷ダイアログが表示されていました。Adobe AIR 2では、PrintJobクラスstart2メソッドの第2引数を使って、印刷ダイアログを表示させるかどうかを制御することができます。これによって、ユーザアクションなしに自動で印刷できることになります。

また、Adobe AIR 2からは、用紙サイズや印刷の向きを変更するためのページ設定ダイアログをPrintJobクラスのshowPageSetupDialogメソッドで表示させることができます。呼び出し結果が、trueの場合は、ユーザがページ設定ダイアログのOKボタンをクリックしてページ設定が変更されたことが判断できます。falseの場合は、キャンセルボタンをクリックしたことになります。

以下のサンプルコードを実行すると、印刷ダイアログを表示することなくデフォルトのプリンタで自動的に印刷開始します。左上に「HelloWorld」と書かれた内容が印刷されます。

サンプルコード: HidePrintDailogSample.as

package { import flash.printing.PrintJob; import samples.page.Page; public class HidePrintDailogSample extends SampleBase { public function HidePrintDailogSample() { var pringJob:PrintJob = new PrintJob(); //start2の第2引数で印刷ダイアログを非表示にします。 if (pringJob.start2(null,false)) { try { pringJob.addPage( new Page().addString("HelloWorld") ); } catch(e:Error) { trace(e.getStackTrace()); } pringJob.send(); } exit(); } } }

以下のサンプルコードを実行すると、ページ設定ダイアログを表示します。設定を変更した場合は、用紙サイズと印刷の向きをトレース出力しています。

サンプルコード :ShowPaperDailogSample.as

package { import flash.printing.PrintJob; import samples.page.Page; public class ShowPaperDailogSample extends SampleBase { public function ShowPaperDailogSample() { var pringJob:PrintJob = new PrintJob(); //ページ設定ダイアログを表示する if( pringJob.showPageSetupDialog()){ trace("設定変更済み"); trace("用紙サイズ",pringJob.pageWidth,pringJob.pageHeight); trace("印刷の向き",pringJob.orientation); } else { trace("設定変更キャンセル"); } exit(); } } }

プリンタの一覧と指定

Adobe AIR 1では、印刷するプリンタを指定することができませんでした。Adobe AIR 2では、PrintJobクラスの printerプロパティに印刷するプリンタ名を指定することができます。これにより、印刷ダイアログを表示しない場合でもプリンタを指定することができます。また、利用可能なプリンタ名称の一覧をPrintJobのprintersから取得できます。

以下のサンプルコードを実行すると、プリンタ一覧をトレース出力します。そして、プリンタを指定して、印刷ダイアログ非表示で自動印刷しています。左上に「HelloWorld」と書かれた内容が印刷されます。

サンプルコード: PrinterSample.as

package { import flash.desktop.NativeApplication; import flash.display.Sprite; import flash.printing.PrintJob; import samples.page.Page; public class PrinterSample extends SampleBase { public function PrinterSample() { //プリンタ一覧取得 var printers:Vector.<String> = PrintJob.printers; for each( var printer:String in printers ){ trace(printer); } var pringJob:PrintJob = new PrintJob(); //プリンタ指定 pringJob.printer = "Microsoft XPS Document Writer"; if (pringJob.start2(null,false)) { try { pringJob.addPage( new Page().addString("HelloWorld") ); } catch(e:Error) { trace(e.getStackTrace()); } pringJob.send(); } exit(); } } }

用紙サイズの指定

Adobe AIR 1では、印刷する用紙サイズを指定することができませんでした。Adobe AIR 2では、PrintJobクラスの selectPaperSizeメソッドを使って用紙サイズを明示的に指定することができます。これにより、印刷ダイアログを表示しない場合でも用紙サイズを指定できます。

指定できる用紙サイズは、PaperSizeクラスに定義してあります。それ以外のA3などのサイズは、必ず印刷ダイアログかページ設定ダイアログを表示してユーザにA3を選択させる必要があります。

PaperSizeクラス
http://help.adobe.com/ja_JP/AS3LCR/Flex_4.0/flash/printing/PaperSize.html

以下のサンプルコードを実行すると、A5の用紙サイズを指定して、印刷ダイアログ非表示で自動印刷しています。左上に「HelloWorld」と書かれた内容が印刷されます。

サンプルコード:PaperSizeSample.as

package { import flash.printing.PaperSize; import flash.printing.PrintJob; import samples.page.Page; public class PaperSizeSample extends SampleBase { public function PaperSizeSample() { var pringJob:PrintJob = new PrintJob(); //用紙サイズの指定 pringJob.selectPaperSize(PaperSize.A5); if (pringJob.start2(false,null)) { try { pringJob.addPage( new Page().addString("HelloWorld") ); } catch(e:Error) { trace(e.getStackTrace()); } pringJob.send(); } exit(); } } }

印刷範囲の指定

Adobe AIR 2から追加されたPrintJobクラスのstart2メソッドの第1引数を使って、印刷ダイアログの印刷範囲を指定することができます。そのためには、PrintUIOptionsクラスを利用します。

プロパティ 説明
disablePageRange 印刷ダイアログのページ範囲が無効かどうか
maxPage 最大ページ番号
minPage 最小ページ番号

以下のサンプルコードを実行すると、印刷ダイアログを表示します。印刷ダイアログで印刷範囲を修正できるようになります。

サンプルコード:PrintUIOptionsSample.as

package { import flash.printing.PrintJob; import flash.printing.PrintUIOptions; import samples.page.Page; public class PrintUIOptionsSample extends SampleBase { public function PrintUIOptionsSample() { var pringJob:PrintJob = new PrintJob(); var options:PrintUIOptions = new PrintUIOptions(); //印刷範囲を1ページから10ページの間で編集可能に指定 options.disablePageRange = false; options.maxPage = 10; options.minPage = 1; if (pringJob.start2(options,true)) { try { //ビットマップ印刷 pringJob.addPage( new Page().addString("HelloWorld") ); } catch(e:Error) { trace(e.getStackTrace()); } pringJob.send(); } exit(); } } }

印刷方法の指定

Adobe AIR 2から追加されたPrintJobクラスのaddPageメソッドの第3引数を使って印刷方法を指定することができます。そのためには、PrintJobOptionsクラスを利用します。Adobe AIR 2で追加された項目は、次の通りです。

プロパティ 説明
pixelsPerInch ビットマップ印刷時に使用する解像度をppi(ピクセル/インチ)を指定します。
printMethod 印刷方法を指定します。これを指定するとprintAsBitmapの設定は無視されます。指定可能な値は、PrintMethod クラスの定数として定義されています。
PrintMedhod.AUTO:印刷するコンテンツに応じて印刷方法を決定
PrintMethod.VECTOR:ベクター形式での印刷 printAsBitmap = false;
PrintMethod.BITMAP:ビットマップ形式での印刷 printAsBitmap = true;

印刷対象内容にベクター形式のコンテンツが含まれていた場合、ベクター形式でプリントするとスプールファイルが小さくなり、画質もビットマップ形式でプリントするより向上することがあります。ただし、印刷対象内容に透明度を持つビットマップデータがある場合は、ページをビットマップイメージとしてプリントする必要があります。また、PostScript 非対応のプリンタでは、ベクター印刷ではなく自動的にビットマップ印刷に変換されます。

以下のサンプルコードを実行すると、PrintJobOptionsを指定して印刷ページを追加しています。印刷されるものは、1枚目がビットマップ形式の印刷で、2枚目がベクター形式の印刷です。

サンプルコード:PrintJobOptionsSample.as

package { import flash.printing.PrintJob; import flash.printing.PrintJobOptions; import flash.printing.PrintMethod; import samples.page.Page; public class PrintJobOptionsSample extends SampleBase { public function PrintJobOptionsSample() { Page.fontSize = 45; var pringJob:PrintJob = new PrintJob(); if (pringJob.start2(null,false)) { try { var options:PrintJobOptions = new PrintJobOptions(); //ビットマップ印刷 options.printMethod = PrintMethod.BITMAP; pringJob.addPage( new Page().addString("HelloWorld"), null, options ); //ベクター印刷 options.printMethod = PrintMethod.VECTOR; pringJob.addPage( new Page().addString("HelloWorld"), null, options ); } catch(e:Error) { trace(e.getStackTrace()); } pringJob.send(); } exit(); } } }

印刷ジョブのプロパティの取得

Adobe AIR 2で追加されたPrintJobのプロパティを一覧表にまとめます。

プロパティ 説明
active 印刷ジョブがアクティブかどうか
copies 印刷する部数
firstPage 印刷範囲の最初のページ番号
isColor カラー印刷するかどうか
jobName 印刷ジョブの名前。プリンタのキューに表示されます。
lastPage 印刷範囲の最後のページ番号
maxPixelsPerInch 選択したプリンタのppi(ピクセル/インチ)単位の解像度
orientation 印刷する向き。指定可能な値は、PrintJobOrientation クラスの定数として定義されています。
paperArea 用紙の境界
printableArea 印刷可能範囲の境界
printer 使用するプリンタ名

おわりに

本記事のチュートリアルでは、Adobe AIR 2の強化された印刷機能について説明しました。サンプルコードを実行して実際に印刷することでAdobe AIR 2では、印刷処理をより柔軟に制御できるようになったことが理解できると思います。Adobe AIR 2は、OSに依存することなく印刷処理を柔軟に記述することができるので、印刷機能を持ったマルチプラットフォームアプリケーションの開発が容易になるでしょう。