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

pCOS(PDF 情報)の取得

PHP コード

pCOS インターフェースにより、PDF ドキュメントから情報を取得して表示します。

使用するソフトウェア:PDFlib+PDI/PPS 7
使用するデータ:PDF入力ファイル


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

  $p = new PDFlib();

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

  $p->set_parameter("SearchPath", $searchpath);

  /* 出力ドキュメントを作らないので、begin_document()の呼び出しは
   * 必要ありません。
   */

  /* 入力ドキュメントを開きます */
  $doc = $p->open_pdi_document($pdfinput, $docoptlist);
  if ($doc == 0) {
    die("Error: " . $p->get_errmsg());
  }

  /* --------- 一般的な情報 (いつでも利用可能) */

  $pcosmode = $p->pcos_get_number($doc, "pcosmode");

  printf("   File name: %s\n",
    $p->pcos_get_string($doc,"filename"));

  printf(" PDF version: %s\n",
    $p->pcos_get_number($doc, "pdfversion")/10);

  printf("  Encryption: %s\n",
    $p->pcos_get_string($doc, "encrypt/description"));

  printf("   Master pw: %s\n",
    (($p->pcos_get_number($doc, "encrypt/master") != 0) ? "yes":"no"));

  printf("     User pw: %s\n",
    (($p->pcos_get_number($doc, "encrypt/user") != 0) ? "yes" : "no"));

  printf("Text copying: %s\n",
    (($p->pcos_get_number($doc, "encrypt/nocopy") != 0) ? "no":"yes"));

  printf("  Linearized: %s\n",
    (($p->pcos_get_number($doc, "linearized") != 0) ? "yes" : "no"));

  printf("      Tagged: %s\n\n",
    (($p->pcos_get_number($doc, "tagged") != 0) ? "yes" : "no"));

  if ($pcosmode == 0) {
    printf("Minimum mode: no more information available\n\n");
    $p->delete();
    exit(0);
  }

  /* --------- 具体的な詳細 (少なくともユーザーパスワードが必要) */
  printf("No. of pages: %s\n",
    $p->pcos_get_number($doc, "length:pages"));

  printf(" Page 1 size: width=%d, height=%d\n",
    $p->pcos_get_number($doc, "pages[0]/width"),
    $p->pcos_get_number($doc, "pages[0]/height"));

  $count = $p->pcos_get_number($doc, "length:fonts");
  printf("No. of fonts: %s\n",  $count);

  for ($i=0; $i < $count; $i++) {
    $fonts = "fonts[" . $i . "]/embedded";
    if ($p->pcos_get_number($doc, $fonts) != 0)
      print("embedded ");
    else
      print("unembedded ");

    $fonts = "fonts[" . $i . "]/type";
    print($p->pcos_get_string($doc, $fonts) . " font ");
    $fonts = "fonts[" . $i . "]/name";
    printf("%s\n", $p->pcos_get_string($doc, $fonts));
  }

  printf("\n");

  if ($pcosmode == 1) {
    print(
      "Restricted mode: no more information available");
    $p->delete();
    exit(0);
  }

  /* ---------ドキュメント情報のキーとXMPメタデータ
   *           (所有者のパスワードが必要)
   */

  $count = $p->pcos_get_number($doc, "length:/Info");

  for ($i=0; $i < $count; $i++) {
    $info = "type:/Info[" . $i . "]";
    $objtype = $p->pcos_get_string($doc, $info);

    $info = "/Info[" . $i . "].key";
    $key = $p->pcos_get_string($doc, $info);
    $len = 12 - strlen($key);
    while ($len-- > 0) print(" ");

    print($key . ": ");

    /* 入力情報は文字列や名前のオブジェクトを保存できます */
    if ($objtype == "name" || $objtype == "string") {
      $info = "/Info[" . $i . "]";
      printf("'" . $p->pcos_get_string($doc, $info) .  "'\n");
    } else {
      $info = "type:/Info[" . $i . "]";
      printf("(" . $p->pcos_get_string($doc, $info) .  " object)\n");
    }
  }

  print("\n" . "XMP meta data: ");


  $objtype = $p->pcos_get_string($doc, "type:/Root/Metadata");
  if ($objtype == "stream") {
    $contents = $p->pcos_get_stream($doc, "", "/Root/Metadata");
    print(strlen($contents) . " bytes \n");
    printf("");
  } else {
    printf("not present");
  }

  $p->close_pdi_document($doc);

  $p->delete();

?>
PHP5.1.2/PDFlib 7.0.0
(Dec 18, 2006)