PDFlib

高度なPDFアプリケーションの開発を支援する定番プログラムライブラリー Supported by インフォテック株式会社

ポートフォリオの利用

1) はじめに

本記事ではポートフォリオについて解説します。

PDF ファイルに複数のファイルを統合するポートフォリオは、Acrobat 9(PDF 1.7 Extension Level 3)で加わった機能です。複数のファイルを一つの PDF ファイルとして取扱うことができるため、関連するファイルを別途提供する必要がなく、最新の文書機能を提供できます。

ポートフォリオは、PDFlib 8.0 からサポートされています。

2) ポートフォリオ利用の準備

PDFlib でポートフォリオを利用する場合、まず PDF のフォーマットバージョンを 1.7 Extension Level 3 に設定する必要があります。


  $p = new PDFlib();
     .
  $p->begin_document("", "compatibility=1.7ext3");         // ... ①
     .
PHP 5 / PDFlib 8.0

基本的な処理は下記の流れで行います。

① begin_document() で compatibility オプションを使用することで PDF のフォーマットバージョンを指定できます。「1.7ext3」は、1.7 Extension Level 3 を表しています。

3) ファイルの登録

PDFlib でポートフォリオにファイルを登録する例を以下に示します。


  $opt = sprintf("description={%s} " .
                 "fieldlist={{key=id value=%d prefix=TXT type=text}}",
                 "sample text", 101);                      // ... ②
  $p->add_portfolio_file(0, "text_sample.txt", $opt);      // ... ③

  $opt = sprintf("description={%s} " .
                 "fieldlist={{key=id value=%d prefix=PDF type=text}}",
                 $bom . mb_convert_encoding("PDF文書", "UTF-8", "SJIS"),
                 102);                                     // ... ④
  $p->add_portfolio_file(0, "PDFlib-datasheet.pdf", $opt);
PHP 5 / PDFlib 8.0

基本的な処理は下記の流れで行います。

② description でファイルの説明を、fieldlist でその他の属性を指定しています。

これらの属性に日本語を指定する場合は、文字コードが特定できるように、UTF-8 で指定する場合には、UTF-8 の BOM を合わせて指定します。

③ add_portfolio_file でポートフォリオのファイルを登録します。

この際、オプションによりファイルの属性を指定します。

④ $bom はプログラム内で "\xEF\xBB\xBF" と定義されています。

4) フォルダの登録

PDFlib でポートフォリオにフォルダを登録する例を以下に示します。


  $folder = $p->add_portfolio_folder(0, "イメージ", "");   // ... ⑤
  $opt = sprintf("description={%s} " .
                 "fieldlist={{key=id value=%d prefix=JPG type=text}}",
                 "sample jpeg", 102);
  $p->add_portfolio_file($folder, "nesrin.jpg", $opt);     // ... ⑥
PHP 5 / PDFlib 8.0

基本的な処理は下記の流れで行います。

⑤ add_portfolio_folder を使いポートフォリオにフォルダを登録します。

この関数の戻り値は、フォルダのハンドルになります。

⑥ add_portfolio_file の引数に、⑤のハンドルを渡します。

これにより、フォルダ内に格納するファイルが登録されます。

5) 表紙の作成

ポートフォリオの表紙は、通常ページを作成するのと同様に記述します。


  $p->begin_page_ext(0, 0, "width=a4.width height=a4.height");
  $font = $p->load_font("HeiseiMin-W3", "Ext-RKSJ-H", "");
  if($font == 0)
    throw new Exception("Error: " . $p->get_errmsg());
  $p->setfont($font, 24);
  $p->fit_textline("ポートフォリオサンプル", 50, 780, "");
  $p->end_page_ext("");
PHP 5 / PDFlib 8.0

上記サンプルでは、ページを A4 サイズで作成した上、HeiseiMin-W3 フォントを SJIS エンコーディングでロードし、文字を出力した後、ページを閉じています。

6) ポートフォリオの属性タイトルの設定

ポートフォリオには、格納されるファイルの名前やサイズなど一覧で表示する機能があり、このラベルを指定することができます。


  $opt = sprintf("portfolio={initialview=detail " .        // ... ⑦
                   "schema={ " .
                     "{order=1 label=%s key=_filename visible editable} " .
                     "{order=2 label={%s} key=_description visible} " .
                     "{order=3 label=%s%s key=_size visible} " .
                     "{order=4 label=%s%s key=_moddate visible} " .
                     "{order=5 label=%s%s key=id type=text editable} " .
                   "}" .
                 "}",
                 "Name",
                 "File Description",
                 $bom, mb_convert_encoding("サイズ", "UTF-8", "SJIS"),
                 $bom, mb_convert_encoding("更新日時", "UTF-8", "SJIS"),
                 $bom, mb_convert_encoding("ID", "UTF-8", "SJIS")
                 );
  $p->end_document($opt);                                  // ... ⑧
PHP 5 / PDFlib 8.0

基本的な処理は下記の流れで行います。

⑦ ポートフォリオのラベルを定義します。

ポートフォリオのファイル属性のタイトルには、予め定義されているものと、ユーザーにより定義しているものをキーとして指定できます。例では、次のキーが使用されています。

order key 内容
1 _filename ファイル名
2 _description  ファイルの説明
3 _size ファイルサイズ
4 _moddate ファイル更新日時
5 id ユーザー定義。②で指定した属性のキーに対応する値

各属性のラベルは lavel= で指定します。order=2 のラベルは、「File Description」と間に空白が含まれているため、{ } で括って指定されているのが判ります。また、日本語のラベルを指定する場合は、④と同様に文字コードを識別する BOM を伴っています。

⑧ end_document() の引数として定義したラベルを渡し、ドキュメントを閉じます。

7) おわりに

上記のサンプルでは、 この PDF ファイルが作成できます。ポートフォリオは、複数のファイルを1つの PDF ファイルにまとめて、関連するファイルを一括して管理できる機能です。関連する複数のファイルを個別に管理する手間や、バージョンの不一致など、文書管理の観点からも有用な機能といえるでしょう。

PDFlib8 は、この PDF の最新機能をサポートしていますので、より見栄えの良い、先進の PDF ドキュメントを是非有効活用してください。

疑問点やリクエストなどがあれば、 お問い合わせフォームからお問合せ下さい。

(Dec 11, 2009 - Sep 27, 2013)