気ままな開発メモ
日々の開発で気付いた事などを備忘録的に綴ってます。

Flexで印刷

8 月 20th 2009 in 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 リファレンス




required



required - won't be displayed


Your Comment:

旅行に行ってきました

11日 出発

夏休みを利用して、関東旅行に出発。

この日はお仕事をご一緒させてもらっている東京の会社の方と昼食。

プライベートな旅行ですが、せっかくなので会える人にはとにかく会っておこうという。

やっぱり、直接会ってお話しすると、違いますね。
いつも電話とメールばっかりですから。

夜は焼肉。
ちょうど友人の誕生日で、一緒にお祝い。

気兼ねなく時間を共有できる仲間ってのは、やっぱり大事ですねぇ。
色々大変なこともあったからなぁ(汗

とにかく、楽しいひとときを過ごせました。

12日 お台場でガンダムと

旅行の目玉、ガンダムとついにご対面。

いやぁ、圧巻です!
テンション上がりまくりです。

[caption id="attachment_269" align="alignnone" width="326" caption="ガンダムの背中"][/caption] [caption id="attachment_267" align="alignnone" width="326" caption="天を見上げるガンダム"][/caption] [caption id="attachment_263" align="alignnone" width="326" caption="闇に浮かび上がるガンダム"][/caption]

やっぱり日本人はこういうの大好きなんですね。
夏休みということもあり、けっこうな人出。

会場の雰囲気もよく、天気も最高。
何気に海の景色もよく、屋台も出ててお祭り感覚。
これだけでも片道3万払って来たかいがあったよ♪

13日 前職の会社訪問

以前お世話になった渋谷の会社に訪問。

社長をはじめ、開発の方々と昼食をご一緒させていただき、通常なら部外者立ち入り禁止のオフィスまで見せてもらっちゃいました。

メンバーも増えていて、自分がいた頃よりも明らかに勢いがありました。
また、当時の懐かしい顔もちらほら。
僕のことを覚えてくれてて、久々の再会に心が温まりました。

皆さんありがとうございました。

よ~し、自分もがんばるぞ!

夕方、大学時代の先輩と合流。

浦和の道場で一局手合わせ(学生時代は将棋部でした)

結果、敗北しましたが(苦笑)、そこそこ指せたので、自分もまだ捨てたモンじゃないっすねw

そのままダーツバーに。
その場にいたお客さんと一戦交える(マイダーツ持っていけばよかった・・・)。
気さくにそういうことができるのがダーツバーの魅力。

そこからタイ料理屋さんで軽く食事をして先輩のいきつけのバーへ。

大学時代の後輩も合流して、思い出話に花が咲く。
明日仕事なのに来てくれた後輩に感謝。

3時近くまで飲んで、元気に帰っていきました。6時に出勤とのこと。

14日 帰途

先輩と、大宮の喫茶店で雑談。元新聞記者の方なので、経験談などを聞く。

夕方、楽しい時間に別れを告げ、一路北海道へ。
空港の屋上からの眺めもまた格別でした。

けっこう行き当たりばったりの旅行でしたが、もともとしっかり計画を立ててっていうのよりも、こういう雰囲気のほうが好きです。

それにしても、楽しかったなぁ。
いろんな意味で、有意義な時間を過ごせました。

温かく迎えてくれた皆様に改めて感謝!

旅行に行ってきましたPrevious Entry

MySQLとUTF-8での「~」の文字化けにハマる

「~」と「〜」 とUTF-8、そしてEUC-JP…

とある案件で、フロント部とCMSを別々に開発していました。
自分はフロント部を担当していて、FlexとPHPを使い、SWFとHTMLによるユーザインターフェースを制作していましたが、CMS側で登録したデータをSWFへ持ってくると、「~」が化けてしまう・・・。

DBの文字コードがUTF-8で、訳あってPHPではEUC-JPを使用(この時点でどうかと思いますが・・・)していて、DBからはMySQLの文字コード変換でデータを引っ張っていました。

この時点で、すでに化けてる(「?」になってしまっている)。

これは、MySQLが文字コードの変換に失敗したときに出る現象。

調べてみると・・・

こちらのサイト様を参考にさせていただきました。

EUCへの変換時に問題があったことが発覚。

MySQLによる文字コード変換をスルーすることで、文字化け自体は回避。

そもそも、サイトの文字コードとシステム文字コード、そしてDBの文字コードが統一されていなかった時点で問題ですね(汗)

けっこう根深い・・・

無事、PHPまでは原型をとどめたまま、データを取得。しかし、今度はそのデータをSWFで表示した際に問題が・・・。

「□」のような表示になってしまってます。

う~む、どうしたもんだろう・・・。

先ほどのサイト様を参考にさせていただきながら、さらに調べる。

「~」は「FULLWIDTH TILDE(全角チルダ)」

「〜」は「WAVE DASH(波ダッシュ)」

で、なにやらWindowsのこれらの文字の取り扱いが怪しい・・・。

とりあえずPHP側で以下のような置き換えをおこない、SWFでも表示されるようになりました・・・。

$ptn = pack(”H*”, “E3809C”);
$rep = pack(”H*”, “EFBD9E”);
// 置き換え!
$result = str_replace($ptn, $rep, $result);

が、どうしてこんなことになってるのか、もっと調べる必要がありそうです。
環境によっては違った結果になるのかも・・・。

参考URL

チルダ-Wikipedia

波ダッシュ-Wikipedia

MySQLとUTF-8での「~」の文字化けにハマるNext Entry