[PHP-users 34413] Re: PDFファイルのプロパティを取得する方法

Hisamitsu Issei ds1i-hsmt @ asahi-net.or.jp
2009年 3月 12日 (木) 00:28:40 JST


久光です

 PDFファイルをバイナリで読み込んでタイトルプロパティを 
取り出すことができました。とりあえず動作しただけなのでまだ調 
整が必要かもしれませんが、できあがったコードを書きます。

ちなみに動作は
エックスサーバーというレンタルサーバ
(http://www.xserver.ne.jp/)
でも確認しました。
PHP Version 5.1.6
です。

====== ここから ========

// PDFファイルをバイナリで読み込む
$filePath = 'hoge/test.pdf';
$handle   = fopen($filePath, "r");
$contents = fread($handle, filesize($filePath));
fclose($handle);

// タイトルプロパティの開始位置を探す
$startPos = strpos($contents, pack('C*', 0x0A, 0x2F, 0x54, 0x69, 0x74,  
0x6C, 0x65, 0x20, 0x28));
// 開始位置をプロパティ値の最初へずらす
$startPos = $startPos + 9;
echo '<div>開始位置' . $startPos . '</div>';

// タイトルプロパティの終了位置を探す
$endPos = strpos($contents, pack('C*', 0x29, 0x0A), $startPos);
echo '<div>終了位置' . $endPos . '</div>';

// タイトルプロパティ値の長さを取得
$l = $endPos - $startPos;
// タイトルプロパティ値を取得
$s = substr($contents, $startPos, $l);

// タイトルプロパティ値をUTF-16からUTF-8に変換
echo mb_convert_encoding($s, 'UTF-8', 'UTF-16BE');

====== ここまで ========

 fread()で全部読み込んでいるので大きなPDFファイ 
ルだとヤバイかもしれませんが、今回想定しているPDFファイ 
ルはどれも20KB程度のサイズなのでよしとしてます。なんとなく 
PDFファイルの末尾あたりにプロパティの格納位置を記録しているら 
しき部分があるようにも見えるので、巨大なPDFファイルを扱 
うときはこのへんを調べて効率的に取り出す方法が必要になるかも。

 とりあえずの目的は達成しました。ありがとうございます。




PHP-users メーリングリストの案内