FlexPrintJobで印刷するときの余白とか
印刷時に余白が欲しい
FlexPrintJobに関して、以前この記事で簡単に触れましたが、クライアントから「余白を設けて、中央に表示したい」と言われ、対応したのでメモ。
FlexPrintJobクラスでは、addObject()メソッドを呼ぶ際の第2引数に、オブジェクトをページに収める方法を指定することができます。
指定するタイプはFlexPrintJobScaleTypeクラスで定義されています。
「FILL_PAGE」は、少なくとも1ページに完全に収まるよう、MATCH_WIDTHかMATCH_HEIGHTのどちらかを自動で選択
「MATCH_HEIGHT」は高さに
「MATCH_WIDTH」は幅に合わせて拡大縮小
「NONE」は、拡大縮小なし
「SHOW_ALL」もFILL_ALLに似ていて、自動で1ページに収まるように拡大縮小してくれます。
でも、ページに余白をつける方法は提供されていません。
Boxのpaddingでいってみる
addObject()メソッドに印刷対象のオブジェクトを渡す直前に余白を調整し、終わったら元に戻すことで調整が可能です。
まず、印刷対象をBox(もしくはBoxを継承したクラス:HBoxやVBoxなど)で、あらかじめ囲んでおきます。
今回はこのコンテナに”printBox”というidをつけました。
もともとパディングは0だったとします。
if( printJob.start() ) {
// 元の幅を持っておく
var tmpWidth:Number = printBox.width;
// 上、左、右の余白を指定
printBox.setStyle( "paddingTop", paddingTopValue );
printBox.setStyle( "paddingLeft", paddingLeftValue );
printBox.setStyle( "paddingRight", paddingRightValue );
// そのままだとはみ出てしまったので
// コンテナの幅を余白の分だけ増やす
printBox.width += paddingLeftValue + paddingRIghtValue;
// 印刷
printJob.addObject( printBox );
printJob.start();
// 元に戻す
printBox.width = tmpWidth;
printBox.setStyle( "paddingTop", 0 );
printBox.setStyle( "paddingLeft", 0 );
printBox.setStyle( "paddingRight", 0 );
}
こんな感じで、なんとかうまく余白がつきました。
もっとうまい方法があるのかなぁ。

