googleで
カスタム検索
プロフィール

けろ&ひな

Author:けろ&ひな
大阪在住。
親ばか。
最近、転職したよ。でも、やってることは一緒なんだけどね。;-P

最近の記事
カテゴリー
月別アーカイブ
最近のコメント
最近のトラックバック
スポンサード リンク

スポンサーサイト--------(--)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[flash][as2]画面を印刷 『PrintJob』 を使ってみた2009-05-22(Fri)

やってる仕事の要件で、flashで画面を印刷する必要がでてきた、、、
で、さっそくリファレンス見ながらどうやったらいいか探ってみた。

使えそうなのは、print関数とPrintJobクラス。

で、リファレンスにはprint関数に関して
「print() は、printAsBitmap() よりも高い品質の印刷を生成できますが、アルファ透明度や特殊カラー効果を使用するムービーを印刷する際には使うことができません。」
という記述があって、どうやらアルファ設定されているMovieClipなんかは印刷できなさそうな雰囲気。
(実際には試してないから出来るかもしれないが、、、)

てことで、PrintJobを使用してみた。
print_btn.onRelease = Delegate.create(this, printEvent);
・・・
private function printEvent():Void
{
var pj:PrintJob = new PrintJob();
if (pj.start()) {
if (pj.addPage(0))
pj.send();
}
delete pj;
}

print_btnを押されたら、PrintJobをnewしてstart()でスプールを開始。
ここでWindows標準の印刷ダイアログが表示されてエラー、またはキャンセルボタンが押された場合は false が返ってくるんで、その時は何もせずにPrintJobを削除。
OK押されたら、addPageで「0」を指定して_rootから印刷指定。
send()で印刷開始!

やったー、印刷できたー♪

と思ったら、印刷対象のMovieClipのサイズと印刷の用紙サイズが合ってなくてはみ出てるよ、、、orz
仕方ないんで、内部で倍率指定しなおして印刷サイズを自動設定だ~。
ついでだから、印刷ボタンの表示を印刷可能なときだけにしてみた。
print_btn._visible = (System.capabilities.hasPrinting);
print_btn.onRelease = Delegate.create(this, printEvent);
・・・
/**
* 印刷処理
* 印刷用紙の方向と幅に合わせて、倍率を変更して印刷する
*/
private function printEvent():Void
{
var pj:PrintJob = new PrintJob();
if (pj.start()) {
var print_mc:MovieClip = _root;
var movieH:Number = print_mc._height;
var movieW:Number = print_mc._width;

//倍率を縦横で用紙サイズに入るほうにあわせる
var scale:Number = Math.min(pj.pageHeight/movieH, pj.pageWidth/movieW);
print_mc._xscale = scale * 100;
print_mc._yscale = scale * 100;
if (pj.addPage(print_mc, {xMin:0, xMax:movieW, yMin:0, yMax:movieH}, {printAsBitmap:true}))
{
pj.send();
}

//倍率を元に戻す
print_mc._xscale = 100;
print_mc._yscale = 100;
}
delete pj;
}

これで、印刷の用紙サイズに関係なく、縦でも横でも1枚に収まるようにできたかなっと。
でも、ダイアログが表示されてしまうけどいいかなぁ、、、。
関連記事

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

コメント

工事中
RSSフィード
リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。