SWFから動的にPDFファイルを生成するためのライブラリであるAlivePDFをちょっと使ってみました。
alivepdf – Project Hosting on Google Code
AIRなら単体でのPDF出力も可能なようですが、SWFファイルからだと単体では無理で、サーバー側にファイル出力用(?)のphpプログラムを設置する必要があるようです。ただ、そのphpプログラムも提供されていたので、とりあえず単純なプログラムを組んで試してみました。
試しに組んでみたファイルのドキュメントクラスは以下の通り。
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import org.alivepdf.colors.RGBColor;
import org.alivepdf.display.Display;
import org.alivepdf.fonts.CoreFont;
import org.alivepdf.fonts.FontFamily;
import org.alivepdf.fonts.Style;
import org.alivepdf.images.ImageFormat;
import org.alivepdf.layout.Layout;
import org.alivepdf.layout.Orientation;
import org.alivepdf.layout.Size;
import org.alivepdf.layout.Unit;
import org.alivepdf.pdf.PDF;
import org.alivepdf.saving.Download;
import org.alivepdf.saving.Method;
import utils.Utils;
/**
* ...
* @author bricoleur.inc / Tonpoo.com
*/
public final class AlivePDFSample extends MovieClip{
public function AlivePDFSample() {
this.stage.addEventListener(MouseEvent.MOUSE_DOWN, onClick, false, 0, true);
}
private function onClick(e:MouseEvent):void {
//PDFインスタンスを生成
var myPDF:PDF = new PDF(Orientation.PORTRAIT, Unit.MM, Size.A4);
//PDFの表示モードを指定
myPDF.setDisplayMode(Display.FULL_PAGE, Layout.SINGLE_PAGE);
//PDFのページを追加
myPDF.addPage();
//文字色を設定
myPDF.textStyle ( new RGBColor ( 0xFF0000 ) );
//フォントサイズを指定
myPDF.setFontSize ( 18 );
//ページの位置(?)を指定
myPDF.setXY( 10, 40 );
//マルチセルの追加
myPDF.addMultiCell ( 300, 1, "This is my PDF Headline" );
//PDFの出力
myPDF.save(Method.REMOTE, "http://www.tonpoo.com/_test/create.php", Download.ATTACHMENT, "sample.pdf");
}
}
}
PDFインスタンスを生成
//PDFインスタンスを生成 var myPDF:PDF = new PDF(Orientation.PORTRAIT, Unit.MM, Size.A4);
まずはnew演算子でPDFインスタンスを生成。引数には「印刷方向」「単位」「印刷サイズ」「印刷角度」を指定できます。何も指定しなくてもいいようですが、サンプルでは「印刷角度」以外を指定してます。
- 印刷方向
-
- Orientation.LANDSCAPE:横向き
- Orientation.PORTRAIT:縦向き
- 単位
-
- Unit.CM:センチメートル
- Unit.INCHES:インチ
- Unit.MM:ミリメートル
- Unit.POINT:ポイント
- 印刷サイズ
-
- Size.A3:A3
- Size.A4:A4
- Size.A5:A5
- Size.LEGAL:リーガル
- Size.LETTER:レター
- Size.TABLOID:タブロイド
「印刷サイズ」でA4やA5の他にレターやリーガルがあるあたりは欧米の紙サイズが基準になってるためですね。B4やB5など上記に無いサイズを指定する場合は・・・どうしたらいいんでしょ。
PDFの表示モードを指定
//PDFの表示モードを指定 myPDF.setDisplayMode(Display.FULL_PAGE, Layout.SINGLE_PAGE);
次に出力したPDFファイルを開いたときの表示モードをPDF.setDisplayModeで指定。引数には「ズーム」「レイアウト」「モード」「拡大率」を指定できます(サンプルでは「ズーム」と「レイアウト」のみ指定)。
- ズーム
-
- Display.DEFAULT:デフォルト
- Display.FULL_PAGE:ページ全体を表示
- Display.FULL_WIDTH:ページ幅を基準に表示
- Display.REAL:よくわからない。100%表示ってこと?
- レイアウト
- Layout.SINGLE_PAGEが「単一ページ」のことだろうと思うんですが、他の値(Layout.ONE_COLUMN / Layout.TWO_COLUMN_LEFT / Layout.TWO_COLUMN_RIGHT / Layout.TWO_COLUMN_RIGHT / Layout.TWO_PAGE_LEFT)については試してないのでよく分かりません。おそらく複数ページ同時表示とかだと思うんですが・・・。
- 拡大率
- 数値で拡大率を指定できるようです。
PDFのページを追加
//PDFのページを追加 myPDF.addPage();
次に、PDF.addPage()メソッドを使ってページを追加します。単純にこのaddPageメソッドを例えば10回繰り返すと、空のページ10ページで構成されるPDFファイルができます。
テキストの追加
//文字色を設定 myPDF.textStyle ( new RGBColor ( 0xFF0000 ) ); //フォントサイズを指定 myPDF.setFontSize ( 18 ); //ページの位置(?)を指定 myPDF.setXY( 10, 40 ); //マルチセルの追加 myPDF.addMultiCell ( 300, 1, "This is my PDF Headline" );
まずはPDF.textStyleメソッドで文字色を指定。引数には色指定の他にも下記のオプションが指定できますが、今回は割愛。
- 文字色
- colors.IColorクラスというのがあって、そのクラスオブジェクトを指定するようです。とりあえずサンプルに従ってcolors.RGBColorインスタンスを指定してみました。
- 透過率
- 0~1の数値(Number)で文字の透過率を指定できます。
- レンダリングモード
- 整数値(int)を指定する事でテキストレンダリングモードを指定できるそうですが、なんのことやら・・・。
- 単語間スペース
- 数値(Number)で単語間のスペースの値を指定できます。
- 文字間スペース
- 数値(Number)で文字間のスペースの値を指定できます。
- スケール
- 数値(Number)で、Text scalingが指定できます。Text scalingって何でしょう・・・
- 行間
- 数値(Number)で行間を指定できます。
次にPDF.setFontSizeメソッドでフォントサイズを設定します。引数には整数値(int)が入ります。
次にPDF.setXYメソッドでページ内のX,Y位置を指定します。これって、要はこの後に配置するマルチセルの配置位置、って認識でいいんですかね・・・。
でもってその後にPDF.addMultiCellメソッドでテキストを含むセルを配置します。まだよくわかってないんですが、どうやらこの「セル」というのがPDFのページ内にいろいろ配置する単位のような感じなんですかね。引数には「幅」「高さ」「テキスト」「ボーダー」「横揃え」「塗り(?)」を指定できるようです。
PDFの出力
//PDFの出力 myPDF.save(Method.REMOTE, "http://www.tonpoo.com/xxxxxxxxx/create.php", Download.ATTACHMENT, "sample.pdf");
最後に、PDF.saveメソッドを使って内容を出力します。引数に指定できるのは「データ送信形式」「送信先URL」「ダウンロード形式」「ファイル名」「表示フレーム名」です。
- データ送信形式
- サーバー側にデータを送信してPDFを生成する場合はMethod.REMOTE、AIRを使った場合などでローカル側のみでPDFを生成する場合はMethod.LOCALを指定するようです。
- 送信先URL
- Method.REMOTEの場合に、送信先のphpファイルのURLをここで指定します。
- ダウンロード形式
- PDFをブラウザ内で表示する場合はDownload.INLINE、保存ダイアログを出して保存させる場合はDownload.ATTACHMENTを指定します。
- ファイル名
- pdfファイルのファイル名を指定します。
- 表示フレーム名
- フレーム内で展開されているコンテンツの場合に、PDFを開く先のフレーム名を指定する、ようです。
ちなみにサーバー側に設置するphp(create.php)のサンプルファイルは、前バージョンのAlivePDFのソースコード一式の中に入っていたものを流用しました。
<?php
$method = $_GET['method'];
$name = $_GET['name'];
if ( isset ( $GLOBALS["HTTP_RAW_POST_DATA"] )) {
// get bytearray
$pdf = $GLOBALS["HTTP_RAW_POST_DATA"];
// add headers for download dialog-box
header('Content-Type: application/pdf');
header('Content-Length: '.strlen($pdf));
header('Content-disposition:'.$method.'; filename="'.$name.'"');
echo $pdf;
} else echo 'An error occured.';
?>
とりあえず実際にアップして確認した所、PDFファイルが生成されてダウンロードできることを確認できました。次は任意のMovieClipの内容などをそのまま出力する方法とかですね。

コメントはまだありません »
コメントはまだありません。
この投稿へのコメントの RSS フィード。 TrackBack URL
コメントする