 |
|
テキストフローの出力
PHP コード
複数ページに及ぶ複数行のテキストを出力します。
使用するソフトウェア:PDFlib/PDFlib+PDI/PPS 7 もしくはそれ以上
使用するデータ:無し
<?php
/* データファイルの場所です。必要なように適合させます */
$searchpath = "../data";
$tf = 0;
$llx1= 50; $lly1=50; $urx1=250; $ury1=800;
$llx2=300; $lly2=50; $urx2=500; $ury2=800;
/* 内容以上のダミーテキスト生成を繰り返す回数 */
$count = 50;
/* 列で満たされているダミーテキスト。
* (文字参照は文字オプションより出来ます)
*/
$text=
"PDFlibは、Adobe PDF(Portable Document Format)形式ファイルをプログラ
ムで生成するためのプログラムライブラリーです。文書を作るイメージで手
順に従って関数を呼んでいけばPDF文書を生成するプログラムを容易に作成
することができます。PDFlibはさまざまなOS上のさまざまな言語をサポート
しているので、きっと日頃お使いになっている開発環境を使ってPDFを作成
することができるでしょう。";
/* SJISからUTF-8へエンコーディングします */
$text = mb_convert_encoding($text, "UTF-8", "SJIS");
/* テキストの長さを取得します */
$length = strlen($text);
$optlist1 = "fontname=HeiseiKakuGo-W5 fontsize=10.5 " .
"encoding=UniJIS-UCS2-H fillcolor={gray 0} " .
"alignment=justify textlen=" . $length ;
$optlist2 = "fontname=Helvetica-Bold fontsize=14 encoding=unicode " .
"fillcolor={rgb 1 0 0} charref";
$p = new PDFlib();
$p->set_parameter("SearchPath", $searchpath);
/* load_font()等からの戻り値を調べなければいけないことを表しています */
$p->set_parameter("errorpolicy", "return");
/* テキストフォーマットに"utf8"を使用し、Unicodeのエンコードを
* 許可します。
*/
$p->set_parameter("textformat", "utf8");
if ($p->begin_document("", "") == 0) {
die("Error: " . $p->get_errmsg());
}
$p->set_info("Creator", "PDFlib starter sample");
$p->set_info("Title", "starter_textflow");
/* いくつかのダミーテキストを作り、一つおきの
* Textflowオブジェクトのオプションに渡します
*/
for ($i=1; $i<=$count; $i++) {
$num = $i . " ";
$tf = $p->add_textflow($tf, $num, $optlist2);
if ($tf == 0)
die("Error: " . $p->get_errmsg());
$tf = $p->add_textflow($tf, $text, $optlist1);
if ($tf == 0)
die("Error: " . $p->get_errmsg());
}
/* 全てのテーブルが配置されるまでループし、それ以上の
* テキストが配置を必要とする間に新しいページを作っていきます。
* 二列は全てのページ上に作られるでしょう。
*/
do {
/* "showborder"をフィットボックスの境界の視覚化のために加えます */
$optlist = "verticalalign=justify linespreadlimit=120% ";
$p->begin_page_ext(0, 0, "width=a4.width height=a4.height");
/* 最初の列で満たします */
$result = $p->fit_textflow($tf, $llx1, $lly1, $urx1, $ury1, $optlist);
/* もしもっとテキストがあるなら、二行目の列で満たします*/
if ($result != "_stop") {
$result = $p->fit_textflow($tf,
$llx2, $lly2, $urx2, $ury2, $optlist);
}
$p->end_page_ext("");
/* "_boxfull"はもっとテキストがあるならば、
* 続けなけれはならないことを表します。
* "_nextpage"は"新しい列を始める"として解釈します。
*/
} while ($result == "_boxfull" || $result == "_nextpage");
/* エラーチェック */
if (!$result == "_stop") {
/* もし、ボックスが非常に小さかったり全てのテキストが
* 入らない場合、"_boxempty"が起こります。
*/
if ($result == "_boxempty") {
die("Error: Textflow box too small");
} else {
/* 他のいくつかの戻り値は、"return"オプションによって
* ユーザーが終了を引き起こしたもので、処理をする
* 精巧なコードを必要とします
*/
die("User return '" . $result . "' found in Textflow");
}
}
$p->delete_textflow($tf);
$p->end_document("");
/* PDFデータをバッファから取り出す */
$buf = $p->get_buffer();
$len = strlen($buf);
/* httpヘッダを生成する */
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=starter_block.pdf");
print $buf;
$p->delete();
?>
|
| PHP5.1.2/PDFlib 7.0.0 |
|
(Dec 18, 2006)