Ghostscriptを使ってPDFにしおりをつける

フリーソフトでPDFにしおりを付加する機能のあるものがなかなか見つからなかった
のですが、実はGhostscriptを使えば結構簡単にできるということがわかりました。

しおりの文字列を日本語にしたい場合は、BOM付きのUTF16(BigEndian)を8進数表記にすれば
よいようなので、文字列=>UTF16 8進数表記変換をするついでにGhostscriptに渡すpdfmarkの
書式をある程度作るHTAツールを作ってみました。

<手順>
手順1. 下記内容を拡張子 .hta にして保存し、実行する。
手順2. 左側の欄にしおりの文字列を1項目1行で記入して"convert->"ボタンを押す。
手順3. 右側の欄の内容をテキストファイルに保存する。
手順4. テキストファイルの /Count や /Page の数値を適宜変更して上書き保存する。
手順5. 下側の欄の引数を参考にして Ghostscript を起動する (pdfmarks.txt のところに、作成したテキストファイルを指定する)

HTAプログラム>
<html>
<body>
<textarea id="src" cols=40 rows=30>
</textarea>
<input type="button" id="convert" value="convert ->"></input>
<textarea id="dest" cols=80 rows=30>
</textarea>
<br/>
<textarea id="cmd" cols=120 rows=3>
gswin32c -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=output.pdf input.pdf pdfmarks.txt
</textarea>
<script>
var txt_src = document.getElementById("src");
var txt_dest = document.getElementById("dest");
var btn_convert = document.getElementById("convert");
btn_convert.onclick = function(){
var lines = txt_src.value.split("\n");
var sz = lines.length;
for(var j = 0; j < sz; ++j){
var l_src = lines[j].replace("\r", "");
var l_dst = "\\376\\377"; // UTF16 (BE の BOM)
var ln = l_src.length;
for (var i = 0; i < ln; ++i){
var c = l_src.charCodeAt(i);
l_dst += "\\" + parseInt(c / 256).toString(8) + "\\" + (c & 255).toString(8);
}
lines[j] = "[/Page x /Count y /Title (" + l_dst + ") /OUT pdfmark";
}
txt_dest.value = lines.join("\n");
}
</script>

</body>
</html>