<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>TONPOOBLOG &#187; alivepdf</title>
	<atom:link href="http://www.tonpoo.com/blog/category/flash/alivepdf/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tonpoo.com/blog</link>
	<description>神宮前にあるWEB制作事務所「株式会社ブリコルール（bricoleur inc.）」に所属しているFlash（ActionScript）開発＆WEB制作プロジェクト「Tonpoo.com」のブログです。</description>
	<lastBuildDate>Wed, 08 Feb 2012 01:35:50 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/category/flash/alivepdf/feed/" />
		<item>
		<title>AlivePDFを使ってSWFからPDF出力</title>
		<link>http://www.tonpoo.com/blog/2010/05/alivepdf/</link>
		<comments>http://www.tonpoo.com/blog/2010/05/alivepdf/#comments</comments>
		<pubDate>Mon, 10 May 2010 09:48:58 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[alivepdf]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=1061</guid>
		<description><![CDATA[SWFから動的にPDFファイルを生成するためのライブラリであるAlivePDFをちょっと使ってみました。 alivepdf &#8211; Project Hosting on Google Code AIRなら単体でのPDF出力も可能なようですが、SWFファイルからだと単体では無理で、サーバー側にファイル出力用（？）のphpプログラムを設置する必要があるようです。ただ、そのphpプログラムも提供されていたので、とりあえず単純なプログラムを組んで試してみました。 試しに組んでみたファイルのドキュメントクラスは以下の通り。 PDFインスタンスを生成 まずは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ファイルを開いたときの表示モードを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.addPage()メソッドを使ってページを追加します。単純にこのaddPageメソッドを例えば10回繰り返すと、空のページ10ページで構成されるPDFファイルができます。 テキストの追加 まずはPDF.textStyleメソッドで文字色を指定。引数には色指定の他にも下記のオプションが指定できますが、今回は割愛。 文字色 colors.IColorクラスというのがあって、そのクラスオブジェクトを指定するようです。とりあえずサンプルに従ってcolors.RGBColorインスタンスを指定してみました。 透過率 0～1の数値（Number）で文字の透過率を指定できます。 [...]]]></description>
			<content:encoded><![CDATA[<p>SWFから動的にPDFファイルを生成するためのライブラリであるAlivePDFをちょっと使ってみました。</p>
<p><strong><a href="http://code.google.com/p/alivepdf/" target="_blank">alivepdf &#8211; Project Hosting on Google Code</a></strong></p>
<p>AIRなら単体でのPDF出力も可能なようですが、SWFファイルからだと単体では無理で、サーバー側にファイル出力用（？）のphpプログラムを設置する必要があるようです。ただ、そのphpプログラムも提供されていたので、とりあえず単純なプログラムを組んで試してみました。<br />
<span id="more-1061"></span></p>
<p>試しに組んでみたファイルのドキュメントクラスは以下の通り。</p>
<pre class="brush: as3; title: ; notranslate">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, &quot;This is my PDF Headline&quot; );

			//PDFの出力
			myPDF.save(Method.REMOTE, &quot;http://www.tonpoo.com/_test/create.php&quot;, Download.ATTACHMENT, &quot;sample.pdf&quot;);
		}
	}
}</pre>
<h3>PDFインスタンスを生成</h3>
<pre class="brush: as3; title: ; notranslate">//PDFインスタンスを生成
var myPDF:PDF = new PDF(Orientation.PORTRAIT, Unit.MM, Size.A4);</pre>
<p>まずはnew演算子でPDFインスタンスを生成。引数には「印刷方向」「単位」「印刷サイズ」「印刷角度」を指定できます。何も指定しなくてもいいようですが、サンプルでは「印刷角度」以外を指定してます。</p>
<dl>
<dt>印刷方向</dt>
<dd>
<ul>
<li><strong>Orientation.LANDSCAPE</strong>：横向き</li>
<li><strong>Orientation.PORTRAIT</strong>：縦向き</li>
</ul>
</dd>
<dt>単位</dt>
<dd>
<ul>
<li><strong>Unit.CM</strong>：センチメートル</li>
<li><strong>Unit.INCHES</strong>：インチ</li>
<li><strong>Unit.MM</strong>：ミリメートル</li>
<li><strong>Unit.POINT</strong>：ポイント</li>
</ul>
</dd>
<dt>印刷サイズ</dt>
<dd>
<ul>
<li><strong>Size.A3</strong>：A3</li>
<li><strong>Size.A4</strong>：A4</li>
<li><strong>Size.A5</strong>：A5</li>
<li><strong>Size.LEGAL</strong>：リーガル</li>
<li><strong>Size.LETTER</strong>：レター</li>
<li><strong>Size.TABLOID</strong>：タブロイド</li>
</ul>
</dd>
</dl>
<p>「印刷サイズ」でA4やA5の他にレターやリーガルがあるあたりは欧米の紙サイズが基準になってるためですね。B4やB5など上記に無いサイズを指定する場合は・・・どうしたらいいんでしょ。</p>
<h3>PDFの表示モードを指定</h3>
<pre class="brush: as3; title: ; notranslate">//PDFの表示モードを指定
myPDF.setDisplayMode(Display.FULL_PAGE, Layout.SINGLE_PAGE);</pre>
<p>次に出力したPDFファイルを開いたときの表示モードを<strong>PDF.setDisplayMode</strong>で指定。引数には「ズーム」「レイアウト」「モード」「拡大率」を指定できます（サンプルでは「ズーム」と「レイアウト」のみ指定）。</p>
<dl>
<dt>ズーム</dt>
<dd>
<ul>
<li><strong>Display.DEFAULT</strong>：デフォルト</li>
<li><strong>Display.FULL_PAGE</strong>：ページ全体を表示</li>
<li><strong>Display.FULL_WIDTH</strong>：ページ幅を基準に表示</li>
<li><strong>Display.REAL</strong>：よくわからない。100%表示ってこと？</li>
</ul>
</dd>
<dt>レイアウト</dt>
<dd><strong>Layout.SINGLE_PAGE</strong>が「単一ページ」のことだろうと思うんですが、他の値（<strong>Layout.ONE_COLUMN / Layout.TWO_COLUMN_LEFT / Layout.TWO_COLUMN_RIGHT / Layout.TWO_COLUMN_RIGHT / Layout.TWO_PAGE_LEFT</strong>）については試してないのでよく分かりません。おそらく複数ページ同時表示とかだと思うんですが・・・。</dd>
<dt>拡大率</dt>
<dd>数値で拡大率を指定できるようです。</dd>
</dl>
<h3>PDFのページを追加</h3>
<pre class="brush: as3; title: ; notranslate">//PDFのページを追加
myPDF.addPage();</pre>
<p>次に、<strong>PDF.addPage()</strong>メソッドを使ってページを追加します。単純にこのaddPageメソッドを例えば10回繰り返すと、空のページ10ページで構成されるPDFファイルができます。</p>
<h3>テキストの追加</h3>
<pre class="brush: as3; title: ; notranslate">//文字色を設定
myPDF.textStyle ( new RGBColor ( 0xFF0000 ) );
//フォントサイズを指定
myPDF.setFontSize ( 18 );
//ページの位置（？）を指定
myPDF.setXY( 10, 40 );
//マルチセルの追加
myPDF.addMultiCell ( 300, 1, &quot;This is my PDF Headline&quot; );</pre>
<p>まずは<strong>PDF.textStyle</strong>メソッドで文字色を指定。引数には色指定の他にも下記のオプションが指定できますが、今回は割愛。</p>
<dl>
<dt>文字色</dt>
<dd><strong>colors.IColor</strong>クラスというのがあって、そのクラスオブジェクトを指定するようです。とりあえずサンプルに従って<strong>colors.RGBColor</strong>インスタンスを指定してみました。</dd>
<dt>透過率</dt>
<dd>0～1の数値（Number）で文字の透過率を指定できます。</dd>
<dt>レンダリングモード</dt>
<dd>整数値（int）を指定する事でテキストレンダリングモードを指定できるそうですが、なんのことやら・・・。</dd>
<dt>単語間スペース</dt>
<dd>数値（Number）で単語間のスペースの値を指定できます。</dd>
<dt>文字間スペース</dt>
<dd>数値（Number）で文字間のスペースの値を指定できます。</dd>
<dt>スケール</dt>
<dd>数値（Number）で、Text scalingが指定できます。Text scalingって何でしょう・・・</dd>
<dt>行間</dt>
<dd>数値（Number）で行間を指定できます。</dd>
</dl>
<p>次に<strong>PDF.setFontSize</strong>メソッドでフォントサイズを設定します。引数には整数値（int）が入ります。</p>
<p>次に<strong>PDF.setXY</strong>メソッドでページ内のX,Y位置を指定します。これって、要はこの後に配置するマルチセルの配置位置、って認識でいいんですかね・・・。</p>
<p>でもってその後に<strong>PDF.addMultiCell</strong>メソッドでテキストを含むセルを配置します。まだよくわかってないんですが、どうやらこの「<strong>セル</strong>」というのがPDFのページ内にいろいろ配置する単位のような感じなんですかね。引数には「幅」「高さ」「テキスト」「ボーダー」「横揃え」「塗り（？）」を指定できるようです。</p>
<h3>PDFの出力</h3>
<pre class="brush: as3; title: ; notranslate">//PDFの出力
myPDF.save(Method.REMOTE, &quot;http://www.tonpoo.com/xxxxxxxxx/create.php&quot;, Download.ATTACHMENT, &quot;sample.pdf&quot;);</pre>
<p>最後に、<strong>PDF.save</strong>メソッドを使って内容を出力します。引数に指定できるのは「データ送信形式」「送信先URL」「ダウンロード形式」「ファイル名」「表示フレーム名」です。</p>
<dl>
<dt>データ送信形式</dt>
<dd>サーバー側にデータを送信してPDFを生成する場合は<strong>Method.REMOTE</strong>、AIRを使った場合などでローカル側のみでPDFを生成する場合は<strong>Method.LOCAL</strong>を指定するようです。</dd>
<dt>送信先URL</dt>
<dd>Method.REMOTEの場合に、送信先のphpファイルのURLをここで指定します。</dd>
<dt>ダウンロード形式</dt>
<dd>PDFをブラウザ内で表示する場合は<strong>Download.INLINE</strong>、保存ダイアログを出して保存させる場合は<strong>Download.ATTACHMENT</strong>を指定します。</dd>
<dt>ファイル名</dt>
<dd>pdfファイルのファイル名を指定します。</dd>
<dt>表示フレーム名</dt>
<dd>フレーム内で展開されているコンテンツの場合に、PDFを開く先のフレーム名を指定する、ようです。</dd>
</dl>
<p>ちなみにサーバー側に設置するphp（create.php）のサンプルファイルは、前バージョンのAlivePDFのソースコード一式の中に入っていたものを流用しました。</p>
<pre class="brush: php; title: ; notranslate">&lt;?php

$method = $_GET['method'];
$name = $_GET['name'];

if ( isset ( $GLOBALS[&quot;HTTP_RAW_POST_DATA&quot;] )) {

	// get bytearray
	$pdf = $GLOBALS[&quot;HTTP_RAW_POST_DATA&quot;];

	// add headers for download dialog-box
	header('Content-Type: application/pdf');
	header('Content-Length: '.strlen($pdf));
	header('Content-disposition:'.$method.'; filename=&quot;'.$name.'&quot;');
	echo $pdf;

}  else echo 'An error occured.';

?&gt;</pre>
<p>とりあえず実際にアップして確認した所、PDFファイルが生成されてダウンロードできることを確認できました。次は任意のMovieClipの内容などをそのまま出力する方法とかですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2010/05/alivepdf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2010/05/alivepdf/" />
	</item>
	</channel>
</rss>

