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

ブロック出力

PHP コード

ブロックを含んでいる PDF ページを入力して、処理します。
ブロックは pCOS インターフェースによって検索されます。
また、ブロックの機能は出力ページのブロックを視覚化するために使用されます。
実際のアプリケーションでは、外部のデータソースから取得したデータで ブロックを埋めることになるでしょう。

使用するソフトウェア:PPPS 7 もしくはそれ以上
使用するデータ:PDF入力ファイル


<?php 
  /* データファイルの場所です。必要なように適合させます */
  $searchpath = "../data";
  $infile = "boilerplate.pdf";

  $p = new PDFlib();

  #load_font()等からの戻り値を調べなければいけないことを表しています
  $p->set_parameter("errorpolicy", "return");
  $p->set_parameter("SearchPath", $searchpath);

  /* テキストフォーマットに"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_block");

  /* PDFが含まれている各ブロックを開きます */
  $indoc = $p->open_pdi_document($infile, "");
  if ($indoc == 0) {
    die("Error: " . $p->get_errmsg());
  }

  /* 初めのページを開きます */
  $page = $p->open_pdi_page($indoc, 1, "");
  if ($page == 0) {
    die("Error: " . $p->get_errmsg());
  }

  $width = $p->pcos_get_number($indoc, "pages[0]/width");
  $height = $p->pcos_get_number($indoc, "pages[0]/height");

  $p->begin_page_ext($width, $height, "");

  /* 読み込みページを出力ページ上に配置します */
  $p->fit_pdi_page($page, 0, 0, "");

  $blockcount = $p->pcos_get_number(  $indoc,
    "length:pages[0]/PieceInfo/PDFlib/Private/Blocks");
  if ($blockcount == 0) {
    die("Error: " .  $infile . "does not contain any PDFlib blocks");
  }

  /* ページ上に全てのブロックをループします */
  for ($i = 0; $i <  $blockcount; $i++) {

    /* 最初のページ上の$i番目のブロックの名前とタイプを取得します。
     * (テキスト/イメージ/PDF の一つ)
     */
    $blockname = $p->pcos_get_string(  $indoc,
      "pages[0]/PieceInfo/PDFlib/Private/Blocks[" . $i . "]/Name");

    $blocktype = $p->pcos_get_string(  $indoc,
      "pages[0]/PieceInfo/PDFlib/Private/Blocks[" . $i . "]/Subtype");

    /* 全てのテキストブロックを視覚化します */
    if ($blocktype == "Text") {
      $optlist = "fontname=Helvetica encoding=unicode " .
                 "fillcolor={rgb 1 0 0} " .
                 "bordercolor={gray 0} linewidth=0.25";

      /* 中身としてブロック名を簡単に使います */
      if ($p->fill_textblock( 
        $page, $blockname, $blockname, $optlist) == 0) {
          print("Warning: " . $p->get_errmsg());
      }
    }
  }



  $p->end_page_ext("");
  $p->close_pdi_page($page);

  $p->end_document("");
  $p->close_pdi_document($indoc);

  /* 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 入力ファイルのブロックのフォントは、Helvetica に指定してあります。




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