Flexで印刷
FlexPrintJobを使う
SWF上の表示を印刷したいっていうことはよくあります。
PDFを作成する・・・ってとこまで大げさではなく、しかしブラウザのプリント機能では、余分なものまで全部入ってしまう・・・。
そんなとき、手軽に印刷内容の調整をおこなえるのがmx.printing.FlexPrintJobクラスです。
MXMLベースで構成されたSWFであれば、容易に印刷が可能です。
ポイント
FlexPrintJobクラスでは、IUIComponentオブジェクトを受け取り、描画します。
つまり、MXML上のビジュアルコンポーネントはなんでも可。もちろん、子を持ったコンテナも大丈夫です。
分かりやすいのは、CanvasやBoxなどのコンテナを、プリント用に配置し、その下に印刷したい対象を配置していく方法です。
このとき注意したいのが、背景色です。
特定のコンポーネントを基準に描画をおこないますので、コンポーネント同士の隙間に例の緑がかったFlex特有の背景が出てしまうことがあります。
プリント用に設置したコンテナに適当な背景色(白など)をあてておくことでこの問題を回避できます。
コード
var pj:FlexPrintJob = new FlexPrintJob();
if ( pj.start() ) {
pj.addObject( printContainer, FlexPrintJobScaleType.SHOW_ALL );
pj.send();
}
まずはFlexPrintJobのオブジェクトを生成してstart()メソッドを呼び出します。
このときエラーがあればFALSEが返ってくるので、戻り値をチェックします。
次に、印刷対象の指定をするために、addObject()メソッドを呼びます。
第一引数のprintContainerは、印刷用に用意したコンテナです。
第二引数は省略可(初期値はFlexPrintJobScaleType.MATCH_WIDTH)で、印刷時にオブジェクトをどう収めるかを指定します。
あとはsend()メソッドを呼んで、印刷開始。
プラスα
印刷対象に透過やエフェクトがなければ、printAsBitmapプロパティをfalseに設定することで、高品質のベクター形式で印刷できます。
参考URL
FlexPrintJob - ActionScript3.0 リファレンス

