投稿

4月, 2012の投稿を表示しています

PDFの圧縮

pdfsizeoptでPDFの圧縮を試みる。

jbig2enc, sam2pをMacPortsからインストール。

pngoutとMultivalent.jarはオープンソースではない。pngoutはバイナリを~/local/binに置く。Multvalent.jarのToolsは現在のバージョンには含まれないので、pdfsizeoptのページからダウンロードして、~/Library/Java/Extensionsに置く。デフォルトでCLASSPATHに含まれるが、環境変数に含まれないのでpdfsizeopt.pyからは分らない。

pdfsizeoptをチェックアウト。pythonの在処を書き換えたpdfsizeopt.pyを~/local/libexecに置く。引数とCLASSPATHを渡し、大量の中間ファイルを取り除くために、pdfsizeopt.pyを下記のスクリプトから呼び出す。

サイズは確かに小さくなるが、処理に結構時間がかかる。途中で落ちてしまうこともある。pdftkでつなげた場合はうまくいった。

#!/bin/sh PDFSIZEOPT=${HOME}/local/libexec/pdfsizeopt.py OPTS="--use-pngout=true --use-jbig2=true --use-multivalent=true" MULTIVALENT=${HOME}/Library/Java/Extensions/Multivalent.jar if [ $# -lt 1 ]; then echo "usage :: $0 input.pdf" exit fi INPUT=$1 TMPDIR=`mktemp -d /tmp/pdfsizeopt.XXXXXX` cp ${INPUT} ${TMPDIR} cd ${TMPDIR} CLASSPATH=${MULTIVALENT} ${PDFSIZEOPT} ${OPTS} ${INPUT} mv ${INPUT%pdf}psom.pdf ${OLDPWD} rm -rf ${TMPDIR}

検索可能な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並みのサイズになった。
ghostscriptでPDFのページを分解してtiffにする。tesseract-ocrでOCRしてhocr2pdf用のHTMLを作成。convertでtiffをLZW圧縮。hocr2pdfで透明テキストとLZW圧縮したtiffをまとめてPDFを作成。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 "${FN…

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

長い書き物をするとき、TeXのソースはいくつかのファイルに分割することが多い。ルートファイルroot.texに\input{foo}を使って、foo.texの中身を取り込む。
コマンドラインだとMakefileに依存関係を書いておくと楽。でも、ちょっと面倒。omakeで更新のたびに自動的にタイプセットすることもできる。
TeXShopでは、foo.texを編集しているときにタイプセットをクリック、またはCommand+Tしてfoo.tex自体をコンパイルしてしまうことがある。
foo.texの冒頭に
%!TEX root = root.tex と書いておくと、foo.texの代わりにroot.texをコンパイルする。
root.texには
%!TEX TS-program = pdflatex のようにどのコマンドでタイプセットするか書いておくとよい。
どちらもTeXShopのヘルプに書いてある。