忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP TCPDFのブックマーク(しおり)の設定方法について(Bookmarkメソッド)

今回は TCPDF で出力するPDFファイルにブックマーク(しおり)を設定する方法について説明します。
ブックマーク設定を行う為には、ブックマークを付加したいところで Bookmark メソッドの呼出を行います。

ここであらためて、Bookmark メソッドの引数について説明を記します。

// Bookmarkメソッド
public function Bookmark($txt, $level=0, $y=-1, $page='', $style='', $color=array(0,0,0), $x=-1, $link='')
// $txt   : ブックマークの文言
// $level : ブックマークレベル(最小値は「0」)
// $y     : ブックマークのY位置(現在選択されているページでPDFの設定単位での指定)
//          ([-1]:デフォルトで現在位置、[0]:ページ先頭)
// $page  : 対象ページ('':現在ページ)
// $style : フォントスタイル('B':Bold, 'I':Italic, 'BI':Bold + Italic)
// $color : RGB color array (values from 0 to 255)
// $x     : ブックマークのX位置(現在選択されているページでPDFの設定単位での指定)
//          ( [-1]:デフォルトで現在位置)
// $link  : URL、数値リンクID、名前付け識別子、
//          埋込ファイルの指定("*"+ファイル名:一般ファイル、"%"+ファイル名:PDFファイル)




以下に簡単な例を記します。

Bookmark メソッドを使用したブックマークの出力

<?php
require_once('../tcpdf/tcpdf.php');

// クラス生成
$pdf = new TCPDF();

// 日本語フォント
$pdf->setFont('kozgopromedium', '', 16);

// ブックマークレベルのX座標位置
$arrLevelXPos = [10, 20, 30];
// ブックマークレベルの表示文字列の色
$arrLevelColor = [ [  0, 64,128], [ 64,128,  0], [ 64,  0,128] ];

// 新規ページ
$pdf->AddPage();

// ブックマーク設定
$pdf->Bookmark('第1章', 0, 10, '', 'B', $arrLevelColor[0]);
// ブックマーク設定位置にテキスト表示
$pdf->MultiCell( 0, 10, '第1章テスト...', 0, 'L', false, 0, $arrLevelXPos[0],  10);

$pdf->Bookmark('第1節', 1, 50, '', 'B', $arrLevelColor[1]);
$pdf->MultiCell( 0, 10, '第1節テスト...', 0, 'L', false, 0, $arrLevelXPos[1],  50);

$pdf->Bookmark('第1項', 2, 100, '', 'B', $arrLevelColor[2]);
$pdf->MultiCell( 0, 10, '第1項テスト...', 0, 'L', false, 0, $arrLevelXPos[2], 100);

$pdf->Bookmark('第2項', 2, 150, '', 'B', $arrLevelColor[2]);
$pdf->MultiCell( 0, 10, '第2項テスト...', 0, 'L', false, 0, $arrLevelXPos[2], 150);

// 新規ページ
$pdf->AddPage();

$pdf->Bookmark('第2節', 1, 10, '', 'B', $arrLevelColor[1]);
$pdf->MultiCell( 0, 10, '第2節テスト...', 0, 'L', false, 0, $arrLevelXPos[1], 10);

$pdf->Bookmark('第1項', 2, 50, '', 'B', $arrLevelColor[2]);
$pdf->MultiCell( 0, 10, '第1項テスト...', 0, 'L', false, 0, $arrLevelXPos[2], 50);

// 新規ページ
$pdf->AddPage();

$pdf->Bookmark('第2章', 0, 10, '', 'B', $arrLevelColor[0]);
$pdf->MultiCell( 0, 10, '第2章テスト...', 0, 'L', false, 0, $arrLevelXPos[0],  10);

$pdf->Bookmark('第1節', 1, 100, '', 'B', $arrLevelColor[1]);
$pdf->MultiCell( 0, 10, '第1節テスト...', 0, 'L', false, 0, $arrLevelXPos[1], 100);

$pdf->Bookmark('第2節', 1, 150, '', 'B', $arrLevelColor[1]);
$pdf->MultiCell( 0, 10, '第2節テスト...', 0, 'L', false, 0, $arrLevelXPos[1], 150);

// PDFファイル出力
$pdf->Output('pdf-bookmark-1.pdf', 'D');
?>

特にソースは難しくはありません。 ブックマークを設置したいところで Bookmark メソッドを実行し、その後で同じ場所にテキストなどを表示します。 これを実行した時に「pdf-bookmark-1.pdf」ファイルが登録されます。

そのファイルを Acrobat Reader で開くと、以下の様な表示がされます。 画面左に「ブックマーク」を表示させて全ての「ブックマーク」を開いたところです。


この表示の中で「第1章」「第1節」「第1項」をクリックすると、当然ですが表示位置が移動します。



Annotation メソッドで埋め込んだファイルのブックマーク

<?php
require_once('../tcpdf/tcpdf.php');

// クラス生成
$pdf = new TCPDF();

// 日本語フォント
$pdf->setFont('kozgopromedium', '', 16);

// ブックマークレベルのX座標位置
$arrLevelXPos = [10, 20, 30];
// ブックマークレベルの表示文字列の色
$arrLevelColor = [ [  0, 64,128], [ 64,128,  0], [ 64,  0,128] ];

// 新規ページ
$pdf->AddPage();

// ブックマークTEST
$pdf->Bookmark('第1章', 0, 10, '', 'B', $arrLevelColor[0]);
$pdf->MultiCell( 0, 10, '第1章テスト...', 0, 'L', false, 0, $arrLevelXPos[0],  10);

$pdf->Bookmark('第1節', 1, 50, '', 'B', $arrLevelColor[1]);
$pdf->MultiCell( 0, 10, '第1節テスト...', 0, 'L', false, 0, $arrLevelXPos[1],  50);

// テキストファイルのアタッチ
$pdf->Annotation(20, 50, 5, 5, 'TEXT file', array(
                    'Subtype'=>'FileAttachment', 
                    'Name' => 'PushPin', 
                    'FS' => 'test.txt'));
// 埋め込みファイルのブックマーク(先頭"*"は一般ファイル)
$pdf->Bookmark('TXT file', 0, 0, '', 'B', $arrLevelColor[2], -1, '*test.txt');

// PDFファイルのアタッチ
$pdf->Annotation(50, 50, 5, 5, 'PDF file', array(
                    'Subtype'=>'FileAttachment', 
                    'Name' => 'PushPin', 
                    'FS' => 'pdf-bookmark-1.pdf'));
// 埋め込みファイルのブックマーク(先頭"%"はPDF)
$pdf->Bookmark('PDF file', 0, 0, '', 'B', $arrLevelColor[2], -1, '%pdf-bookmark-1.pdf');

// PDFファイル出力
$pdf->Output('pdf-bookmark-2.pdf', 'D');
?>



ファイルのブックマークを作成する場合は Annotation メソッドでファイルを埋め込み指定を行い、 その後で Bookmark メソッドを実行する様です。
以下に実行結果のPDFファイルを開いたところを示します。 なお、ブックマークの「TXT file」をクリックするとテキストファイルとしてエディタソフトで表示されます。












PR

コメント

コメントを書く