入門 6 - テキストを出力する (IV) -
4. 複数行テキストの出力
複数行に渡るテキストを出力する場合、texflow()関数を使用します。texflow()関数では、インデントや行分割などさまざまなレイアウト指定に基づき、複数の矩形領域(フィットボックス)にテキストを配置します。レイアウトなどの指定はインラインオプションによりテキストの中に埋め込むこともできます。
textflow関数によるテキスト出力の手順は以下の通りです。
$font = $p->set_option("searchpath=resource/fonts");
$font = $p->set_option("FontOutline={MS-Mincho=msmincho.ttc}")
$font = $p->load_font("MS-Mincho", "unicode", "");
//出力する複数行のテキストを用意する
$text=
"ようこそ
PDFlibの
世界へ";
//PDF_create_textflow()で使用するオプションリストを変数にセットする
$optlist ="font=$font fontsize=24";
//PDF_create_textflow()関数により出力するテキストを準備する
$textflow= $p->create_textflow($text, $optlist);
/* PDF_fit_textflow()関数により指定したフィットボックスに
* テキストを出力する
*/
$result = $p->fit_textflow($textflow, 38, 450, 280, 790, "");
//"左下x", "左下y", "右上x", "右上y"
PHP 8 / PDFlib 10
create_textflow()は、テキストを分析してtextflowオブジェクトを生成し、そのハンドルを戻り値に返します。fit_textflow()関数では、第1パラメータでtextflowのハンドルを、第2パラメータ以降の4つのパラメータでフィットボックスの左下と右上のX,Y座標を指定します。
段組など複数のフィットボックスにテキストを配置したり、ページをまたがってテキストを配置する場合には、fit_textflow()関数の戻り値を判定して処理を行います。フィットボックスがテキストで満たされるとfit_text()関数は処理を中断し、戻り値に「_boxfull」という文字列を返します。fit_textflow()は中断時のステータスを保持しており、次の呼び出しのときには中断時以降の処理を再開します。次の例は、複数のフィットボックスに出力する場合のプログラム例です。出力例を下図に示します。フィットボックスは実際には出力されていませんが青い線で示しています。
//PDF_create_textflow()関数により出力するテキストを準備する
$textflow = $p->create_textflow($text, $optlist);
/* PDF_fit_textflow()関数により指定したフィットボックスに
* テキストを出力する
*/
$result = $p->fit_textflow($textflow, 38, 450, 280, 790, "");
/* fit_textflow() の戻り値が "_boxfull" だった場合、
* 残りの文字列を出力する
*/
if ($result == "_boxfull") {
$p->fit_textflow($textflow, 315, 450, 557, 790, "");
}
PHP 8 / PDFlib 10