物理エンジンライブラリ Box2DFlashAS3(基本)

Box2DFlashAS3に再チャレンジです。バージョンは2.0.2を使用
使い方等ざっと自分用にまとめ。

使い方

  1. 領域(b2AABB)・重力(b2Vec2)・スリープ(Boolean)設定して、Box2Dの世界(b2World)作成
  2. 性質(b2ShapeDef)設定(素材(密度・摩擦力・反発力)、形状(多角形・円、サイズ))
  3. 配置(b2BodyDef)設定(配置座標、配置角度、表示用オブジェクト、スリープ指定)
  4. B2世界上で、配置から物体(b2Body)作成。物体上で性質から形状(b2Shape)作成。形状を固める。
  5. 一定時間毎(EnterFrameイベントなど)で演算させ、結果を表示用オブジェクトに反映させる

Box2Dの単位

  • Box2Dの単位はメートル。縦横1を指定した箱を作ると、縦横1メートルの箱を作ることになる。
  • Box2Dの指定・算出したサイズや座標の値をそのまま使うと、1ピクセル1メートルの世界になってしまう。でかい。
  • なので、スケールを指定してやって、100ピクセル1メートルとかにして使用する。

Box2Dの基点(原点)

  • Box2Dの基点は中心。
  • サイズ指定するときは、中心からの距離で指定する。
  • 長方形なら、辺の半分、円なら半径を指定、多角形は中心座標を指定して、そこから頂点の距離
  • 座標の指定も、左上ではなく、中心を指定。Flashでパーツを作る場合は、ステージの中心を原点にする。

続きを読む »

FPDFでPDFにセキュリティ(文書の制限)を付ける

FPDFでPDFにセキュリティを付ける方法のメモです。
FPDF本家サイトのScriptにProtectionというスクリプトがあるので、それをダウンロード。

MBFPDFと併用する場合の、mbfpdf.phpの書き換え方法

MBPDFと併用して使う場合、MBPDFを、FPDF_Protectionの派生クラスとなるように、変更する必要があります。

fpdf_protectionのファイルをインクルード(14行目あたりに追加)

PHP:
  1. require('fpdf_protection.php');

クラスを定義してある部分の基底クラスを FPDF から FPDF_Protection に変更(42行目あたりを変更)

PHP:
  1. class MBFPDF extends FPDF

下のように書き換え

PHP:
  1. class MBFPDF extends FPDF_Protection

_putType0($font)関数(554行目あたり)の以下の一行(596行目あたり)を修正

PHP:
  1. $this->_out('/CIDSystemInfo <</Registry (Adobe) /Ordering ('.$font['registry']['ordering'].’) /Supplement ‘.$font['registry']['supplement'].’>>’);

下のように書き換え

PHP:
  1. $this->_out('/CIDSystemInfo <</Registry '.$this->_textstring('Adobe').' /Ordering '.$this->_textstring($font['registry']['ordering']).’ /Supplement ‘.$font['registry']['supplement'].’>>’);

基本的な使い方

PHP:
  1. //MBFPDFクラスは、FPDF_Protectionの派生クラスにしておく
  2. require('lib/mbfpdf.php');
  3.  
  4. $pdf=new MBFPDF();
  5.  
  6. //セキュリティを付ける(許可する動作, 開くときのパスワード, 編集するときのパスワード)
  7. /*
  8. 許可する動作で、指定できる値(配列で指定)
  9.   copy: テキストと画像をクリップボードにコピーする
  10.   print: 印刷
  11.   modify: 編集
  12.   annot-forms: 注釈とフォーム
  13. 開くときのパスワードは、空の場合はパスワード無し。デフォルトは空
  14. 編集するときのパスワードは、指定しないとランダムになる
  15. */
  16.  
  17. //印刷のみ許可、開くときのパスワード=userpass、編集するときのパスワード=ownerpass
  18. $pdf->SetProtection(array('print'), 'userpass', 'ownerpass');
  19.  
  20. $pdf->AddMBFont(KOZMIN, 'EUC-JP');
  21.  
  22. $pdf->Open();
  23. $pdf->AddPage();
  24.  
  25. $pdf->SetFont(KOZMIN, '', 14);
  26. $pdf->Write(16,"セキュリティ付のPDFです。");
  27.  
  28. $pdf->Output('protect_output.pdf', 'D');

PHPでPDFを作成するFPDF

FPDFはPHPでPDFを作成することができるライブラリです。ライセンスはFreeware。
PHPでPDFを作るライブラリを探していて見つけたものです。ちょっと使ってみたので、メモを残します。
だいぶ前に更新が止まってるので、新しく使うなら後継のTCPDFの方がいいかもしれません。

日本語を使用できるようにする

マルチバイト文字(日本語)が使用できるようにすには、MBFPDFというライブラリを使用します。(他にもあるみたいですが、使ったのがこれだったので)。Shift-JISとEUC-JPが使用できるようになります。
PDF関連情報:PHP toolsから、mbfpdf10b.zipをダウロードしてきます。
解凍すると、fpdfというフォルダができるので、この中身を、元のfpdfを置いてあるフォルダに移動して上書きします。
mbfpdf.phpが本体ファイル。FPDFクラスの派生クラスMBFPDFが入ってます。

基本的な使い方

PHP:
  1. //MDPDFを読み込む
  2. require('lib/mbfpdf.php');
  3.  
  4. //コンストラクタ(ページ方向(P=縦、L=横)、単位、ページサイズ)
  5. $pdf=new MBFPDF('P', 'mm', 'A4');
  6.  
  7. //使うフォントの指定
  8. //mbfpdf.phpの Short Font Name で指定してあるものを使用
  9. //文字コードはEUC-JPを使用
  10. $pdf->AddMBFont(KOZMIN, 'EUC-JP');
  11. $pdf->AddMBFont(PGOTHIC, 'EUC-JP');
  12.  
  13. $pdf->Open();
  14. $pdf->AddPage();
  15.  
  16. //フォントを設定(フォント名, 文字スタイル)
  17. $pdf->SetFont(KOZMIN, '', 14);
  18.  
  19. //文字を整形して出力(行の高さ, テキスト)
  20. $pdf->Write(16,"おはようございます。nこんにちは。nこんばんは");
  21.  
  22. //改行文字を入れないと、前の文に続けて表示される
  23. $pdf->Write(16,"前の文から続けて表示されます。n");
  24.  
  25. //青色で、下線が引かれたリンクを出力
  26. $pdf->SetTextColor(0,0,255);
  27. $pdf->SetFont('','U');
  28. $pdf->Write(16,"リンクの文字列になりますn", 'http://example.com/');
  29.  
  30. //フォントを変えて出力
  31. $pdf->SetFont(PGOTHIC, '', 12);
  32. $pdf->Write(14,"フォントを変えましたn");
  33.  
  34. //現在位置変更
  35. $pdf->SetXY(100, 80);
  36. $pdf->Write(20,'位置変更:X=100, Y=50');
  37. $pdf->Write(14,"n改行すると、位置が戻るようです。n");
  38.  
  39. //PDFファイル出力(ファイル名, 出力方法)
  40. /*
  41. $pdf->Output("output.pdf", 'I'); ブラウザにそのまま表示
  42. $pdf->Output("output.pdf", 'D'); ダウンロード用のダイアログボックス表示
  43. $pdf->Output("./out_pdf/output.pdf", 'F'); ローカルに保存
  44. $pdf->Output("output.pdf", 'S'); PDFの中身そのままテキストで表示
  45. */
  46. $pdf->Output()//引数をなしにすると、画面にそのまま表示する