パーソナルビジネスソフトとお役立ち情報のサイト
PDFlib
COOKBOOK - PDFlib サンプルプログラム

テキストフローの出力

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)










テキストフローに関しては、こちらも参考にしてください。




■データファイルには「使用するデータ」と「CMap データ」が含まれます。




■「PDF 出力」はライセンスを取得されていない方がテストした結果と同様になるように、ライセンスキーを適用しない状態で出力したものです。そのため、「www.pdflib.com」スタンプが表示されていますが、ライセンスキーを適用すると表示されません。