手持ちの冊子形式の資料を裁断することなく、しかも低価格のフラットベッドスキャナだけで、あまり質は求めないがとにかく PDF にしてタブレットでも参照できるようにしたい、というありがちなケースに関して。
表紙は上向きに、次のページは上下逆に、その次のページは上向きに、、、という感じで、交互に最後までフラットベッドスキャナでスキャンします。なお PDF は、1ページ1ファイルで保存します。
File0001.PDF, File0002.PDF, File0003.PDF, File0004.PDF, File0005.PDF, という感じのファイルができたとします。スキャン忘れや重複スキャンが無いかチェックします。
チェックが済んだら、日頃お使いの UNIX 機で
とします。
1. の pdftk *.PDF cat output hoge.pdf は、見ればだいたい分かりますね。全部のファイルを結合して、ひとつの PDF (ここでは hoge.pdf) にします。
問題は、2. の pdftk A=hoge.pdf shuffle Aodd Aevensouth output out.pdf の方ですが、これは hoge.pdf の、各奇数ページを上下逆にしたものを out.pdf というファイルに出力せよ、という意味です。まあ、pdftk は高機能ですねというべきか書式が難解なツールですねというべきか。
1枚1ページの PDF ファイルを、上下逆さまにする場合は
なお、ミスせず着実に冊子をスキャンできる人は、本を上下逆さにしながら、まとめて1つの PDF を作成した上で、前述の 2. だけを実行する事も可能です。スキャンしおわったら途中でミスしていた事に気づいた、という場合は面倒ですが。
HTML のデータを処理するちょっとしたツールプログラムを、何も資料を書かずに2時間ぐらい作成していたら、途中で何をやっているのかわけがわからなくなった。年齢的にプログラムは厳しいか…でもないか。かねてよりプログラムは書けた試しがないのでサンデープログラマーにもなれていなかったが、頑張って書くか? 言語は? でも正規表現で最短マッチが使えれば簡単に処理できるのに、と思いネットで検索。Wikipedia の正規表現には
Perl は POSIX の拡張正規表現さえも上回る豊富な文法を持っている。その例として、POSIX とは異なり、Perl の正規表現には「非欲張り量指定子」がある。
ふーん、と思う。いまどき sed と AWK で何とかするのも厳しい、いよいよ Perl ぐらい使えないとダメかと思ったが、鬼車が対応しているらしい。だったら、正規表現エンジンとして鬼車を組み込んだ sed の実装である Onigsed で何とかなるんじゃないかと思い直す。
それで onigsed でやってみたが全くダメ。なぜだと思ったが、Perl 風の正規表現を使う場合は -R オプションが要るんですと。いや、onigsed には (パッと見た範囲では) 書いてなくて、追記メモ(regex回数指定修飾子)*?+というページに書いてあった。これでハードルはひとつクリヤ。
s/<span.*?>//g
s/<sup class=.*?>/<sup>/g
s/<\/span>//g
s/<a href=.*?>//g
s/<\/a>//g
s/<p><\/p>//g
さて、AWK の文字列操作関数なんて忘れてる上に、『プログラミング言語AWK』の本もどこかにいってしまっている…しかし、ネットは便利である。検索してAWKで一番の得意ワザ! シェルで文字列を自在に扱うための文字列関数を見たら、なんとかなった。
{
file=$2
sub("html", "txt", file)
printf(" <a href=\"./index.html\">[最初]</a>", $1) > file
printf(" <a href=\"./%s%s\">[章へ]</a>", substr($2,1,5), substr($2,10,5)) > file
printf(" <a href=\"./%s\">[前へ]</a>", $1) > file
printf(" <a href=\"./%s\">[次へ]</a>\n", $3) >> file
close(file)
}
これは、何とか.html に対し、追加するテキストを、何とか.txt という名前で生成するためのスクリプトです。
copy head new\%1.html
nkf -Lu --utf8 %1.txt >> new\%1.html
onigsed -Wctype=UTF8 -f script1.sed %1.html | onigsed -Wctype=UTF8 1,3d | onigsed -R -Wctype=UTF8 -f script2.sed | tr -d "\r" >> new\%1.html
nkf -Lu --utf8 %1.txt >> new\%1.html
type tail >> new\%1.html
あれ…UTF-8 から tr で無条件で CR を削除して大丈夫かな… nkf で改行コードを変える方が無難そう。まぁ、いいか。
あると述べているページも幾つかありますが
手持ちの Win7 の IE11 では、meta で charset="utf-8" を指定しただけで表示されましたので良しとします。だいたいバグのあるブラウザごとに文字化け対策なんてやってられないです。まともな実装をしてください、としかいいようが。
私は長らく CSS は「複数のバージョンがあり、しかも互換性が無い」「ブラウザが対応していない」「内容は一緒なのにそこまでして見栄えのこだわることに価値を見出せない」という理由で忌み嫌っていたのだが、ページ数が膨大かつ表示を揃えたいとなると、最低限の CSS を使うのも仕方ない。それで、以下のページを参考に、初めて使ってみた。
簡単な事しかしていないので簡単でした。ブラウザによってデフォルトのフォントのサイズが異なるので調整が必要、というのは不毛な気がするけど。