PDFにはタイトルとか作成者、キーワードなどを含めることができますが、日本語を含めるにはどうすればいいのだろうと調べてみました。
Acrobatでは問題なく編集できます。で、PDFファイル作成のバッチ処理のため使おうと思っているpdftkというツールでは、このキーワードなどのメタデータを別途ファイルにしておいて設定できます。以下のような感じです。
$ pdftk in.pdf update_info meta.txt output out.pdf
しかし、このファイルに直接日本語を入れてもだめでした。EUCやUTF-8にしてもだめ。
そこでpdftkではPDFファイルのメタデータを取得することもできることを思いだし、
$ pdftk in.pdf dump_data output meta.txt
みたいな感じで実行してみました。そして、この取得したテキストファイルを覗くと、日本語のデータは実体参照、Unicodeの整数値となっています。ですから、pdftkなどでメタデータを変更するときもUnicodeの値を入れておけばOK。例えば「四畳半」は「四畳半」となります。
このUnicodeの整数値というのはブラウザのJavaScriptでcharCodeAtメソッドで簡単に取得できますし、「実体参照 変換」で検索すれば変換できるページを見つけられます。(phpやperlではどうするかは現在調査中)
追記
perlでの変換方法は
use utf8; $str = "四畳半"; @out = unpack("U*", $str); foreach(@out) { print "&#$_;"; }
な感じです。対象とする文字列にどんなものが入ってもOKかどうかはわかりませんのでご注意。
追記 (3/20)
phpではmb_encode_numericentityという関数がありました。
<?php $str = "四畳半"; $convmap = array(0x0080, 0xffff, 0, 0xffff); print mb_encode_numericentity($str, $convmap, "UTF-8"); ?>
という感じです。$convmapという見慣れないものが出てきますが、コードの始点と終点の範囲、オフセット値、マスク値を指定します。UTF-8の場合0x00から0x7fの間はASCIIと同じですから、この場合は0x80からを変換する意味で上記のような始点指定となりました。
ちなみに上記で「4畳半」を変換すると「4&#30067;&#21322;」に、$convmap = array(0x0000, 0xffff, 0, 0xffff);で変換すると「&#52;&#30067;&#21322;」となります。