納品するソフトウェアのスクリーンショットを印刷しなければならない。
印刷対象となるスクリーンショット画像が多数あるので、なんとか単純化できないか?
(今後もバージョンアップのたびにこの作業は発生することだし。)
オライリーのPDF HACKSを見てみると、ImageMagickの convert ツールでこれができると書いてある。
$ convert -density 100 -page "800x800>" -resize "800x800>" *.gif output.pdf
やってみると確かにカレントディレクトリにある *.gif画像のスクリーンショットを全部一ページ一画像の形でPDFに変換してくれた。
超便利!と思ったけど、余白がない状態で出力される。
これなんとかならないか、と思って調べたが、余白をとる方法がわからなかった。
そもそも生成するconvertコマンドのオプション自体も意味がわからない(まさにマジックだ)。
仕方がないので再び iText にお世話になることにした。
import sys import java.io as io import com.lowagie.text as itext SRCIMG=sys.argv"1] OUTPDF=sys.argv[2] RATE=0.7 doc=itext.Document(itext.PageSize.A4.rotate()) itext.pdf.PdfWriter.getInstance(doc, io.FileOutputStream(OUTPDF)) doc.open() rect=doc.getPageSize() pageW=rect.getWidth() pageH=rect.getHeight() img=itext.Image.getInstance(SRCIMG) w=img.getWidth() h=img.getHeight() w_=pageW * RATE #h_=pageH*RATE h_= h * w_ / w img.scaleAbsolute(w_,h_) img.setAbsolutePosition( (pageW-w_)/2,(pageH-h_)/2 ) doc.add(img) doc.close()
RATEの指定した割合で、余白が設定されます。
RATE=0.8にすると、画像をページ横サイズに対して 0.8(80%)に設定して出力します。
(画像の縦サイズについては、画像の縦横比率を考慮して調整。)
実行するには、 itext-2.0.4.jar が必要です。
( [iTextダウンロードページはこちら":http://www.lowagie.com/iText/download.html )
例によって、toPdf.py と同じディレクトリに itext-2.0.4.jar をコピーして、以下のように実行します。
( 参考 )
$ export CLASSPATH=itext-2.0.4.jar; jython toPdf.py input.gif output.pdf
input.gif にPDFにしたい画像を用意して実行したら、output.pdfができます。
画像形式は、gif,jpg,png などいろいろな形式に対応しているはず。
追記 本日(2009-08-24)時点の最新版 iText-2.1.7.jar でも作動します。
toPdf.py は一度に一つの画像を一ページのPDFに変換することしかできない。
が、あとは、“複数のPDFを一つのファイルに結合する”:catPdf.html を使って、生成しておいたPDFを一つのファイルにまとめてしまえば、目的は達成される。
たとえば、1.gif,2.gif,3.gif .... スクリーンショット画像を用意しておき、以下のシェルスクリプトで、カレントディレクトリ中のgif画像をPDFl化した上で、ひとつのファイル result.pdf にまとめる。
export CLASSPATH=itext-2.0.4.jar
for item in `ls *.gif`
do
pdf=${item%.*}.pdf
jython toPdf.py $item $pdf
echo $pdf
done
pdftk *.pdf output result.pdf
MindBoard は 直観的な操作で簡単にマインドマップを描くことができる Android タブレット用アプリです。