検索可能なPDF作成

論文の多くがPDF化されているが、透明テキストがついていない場合がある。Acrobatがするのが楽だが、フリーウェアでも可能。

MacPortsでは、ghostscript, hocr2pdfが含まれているexact-image, tesseractと辞書 (tesseract-eng, tesseract-jpnなど) をインストールする。以下の手順をスクリプトにまとめた(参考にしたrubyスクリプト)。

LZW圧縮してもファイルサイズ大きい3倍くらいになる。圧縮しないと10倍くらい。Acrobatだと元のファイルより小さくなっている。-dPDFSETTINGS=/screenだと解像度はともかく、画像が乱れて使い物にならなかった。


gsの-sDEVICE=tifflzwはモノクロなので、一旦非圧縮の24bitカラーに出力してからconvertで変換している。

追記: pdftkでまとめるのが良い。MacPortsではgcc-4.5のバグ?のため、コンパイルできないのでバイナリをインストール。サイズはpdfsizeoptでAcrobat並みのサイズになった。
  1. ghostscriptでPDFのページを分解してtiffにする。
  2. tesseract-ocrでOCRしてhocr2pdf用のHTMLを作成。
  3. convertでtiffをLZW圧縮。
  4. hocr2pdfで透明テキストとLZW圧縮したtiffをまとめてPDFを作成。
  5. pdftkghostscriptで一つのPDFにまとめる。
#!/bin/sh
PDFTK=pdftk
GS=gs
RES=300
TIFF=tiff24nc
GSOPTS="-q -dBATCH -dNOPAUSE"
TESSERACT=tesseract
CONVERT=convert
CONVERTOPTS="-compress lzw"
HOCR2PDF=hocr2pdf
PDFQUALITY=/ebook
if [ $# -lt 2 ]; then
  echo "Usage :: $0 input.pdf lang (eng|jpn)"
  exit
fi
FNAME=$1
LANG=$2
TMPDIR=`mktemp -d /tmp/pdfocr.XXXXXX`
cp "${FNAME}" ${TMPDIR}
cd ${TMPDIR}
${GS} ${GSOPTS} -r${RES}x${RES} -sDEVICE=${TIFF} -sOutputFile="${FNAME%.pdf}_%04d.tiff" "${FNAME}"
rm -f ${FNAME}
for tiff in *.tiff; do
  ${TESSERACT} -l ${LANG} ${tiff} ${tiff} hocr > /dev/null 2>&1
  ${CONVERT} ${COVERTOPTS} ${tiff} ${tiff%.tiff}_lzw.tiff
  hocr2pdf -i ${tiff%.tiff}_lzw.tiff -o ${tiff%tiff}pdf < ${tiff}.html
  rm -f ${tiff}.html
done
#${GS} ${GSOPTS} -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=${PDFQUALITY} -sOutputFile="${OLDPWD}/${FNAME%.pdf}_ocr.pdf" `ls -1 *.pdf`
${PDFTK} *.pdf cat output ${OLDPWD}/${FNAME%.pdf}_ocr.pdf
cd -
rm -rf ${TMPDIR}

コメント

このブログの人気の投稿

静的サイト生成ツールの導入

uptex

TeXのソースを分割してTeXShopでタイプセット