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

Hisamitsu Issei ds1i-hsmt @ asahi-net.or.jp
2009年 3月 12日 (木) 09:17:24 JST


久光です


 PDFファイルからプロパティを取得するphpスクリプ 
トの続報です。プロパティ値に全角英字のHとIが含まれると文字 
化けする問題がありました。バイナリエディタでこの部分をみると本来 
FF28、FF28であるはずの文字コードが 
FF5C28、FF5C29になっていました。5Cはバックスラッ 
シュで、なんでこんなところにエスケープが紛れ込んでしまうのか 
悩んだんですが、PDFのプロパティ値が()でくくってい 
るので、28と29をエスケープしているんだと気づきました。
 ということでUTF-16からUTF-8へ変換する前にエス 
ケープ解除するスクリプトを追加しました。


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

$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;
// タイトルプロパティの終了位置を探す
$endPos = strpos($contents, pack('C*', 0x29, 0x0A), $startPos);		
// タイトルプロパティ値の長さを取得
$l = $endPos - $startPos;
// タイトルプロパティ値を取得
$s = substr($contents, $startPos, $l);
// ( と ) のエスケープ解除
$s = str_replace('\\(', '(', $s);
$s = str_replace('\\)', ')', $s);
// タイトルプロパティ値をUTF-16からUTF-8に変換
$title = mb_convert_encoding($s, 'UTF-8', 'UTF-16');

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



■■◇ (有)久光工房
■■■ e-mail: hisamitsu @ office.email.ne.jp
■■■ 〒237-0068 神奈川県横須賀市追浜本町2-33
■■■ tel&fax: 046-869-3680
□■■ ================
□□■ Cosmetic-Info.jp
□□□ 国内最大級の化粧品原料検索サイト
◆□□ http://www.cosmetic-info.jp/



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