Index > PDF文書に後からノンブル(ページ番号)を追加する (jython版)
Sun, August 31, 2008

PDF文書に後からノンブル(ページ番号)を追加する (jython版)

groovy で書き直して現行 iText-5.0.3 で動くように修正した バージョンは こちら(PDF文書に後からノンブル(ページ番号)を追加する) です。

手持ちのPDF文書を印刷しようとしたときに、 ページ番号がついてなくて困ったことありませんか?
iText を使えば、あとから”ペタンペタン”とスタンプを押すように イメージやテキストを追加することができます。
この機能を利用して、コマンドラインから簡単に ページ番号をPDF文書に追加する方法を 紹介します。

ここでは、 iTextを簡単に使うために、jythonを使用します。

コード nombre.py

import sys
import java.lang as lang
import java.io as io
import com.lowagie.text as itext
import com.lowagie.text.pdf as pdf


false=0
true=1

# nombre font size
FONT_SIZE=20
FONT=pdf.BaseFont.createFont("Times-Roman", "Cp1252", false)

# nombre stamp location(x,y)
DIFF_X=50
DIFF_Y=50

# 
START_PAGE_NUMBER=1


infile=sys.argv[1]
outfile=sys.argv[2]

def doStamp(pagenumber,infile,outfile):

    fin=io.FileInputStream(infile)
    fout=io.FileOutputStream(outfile)

    r=pdf.PdfReader(fin)

    stamper=pdf.PdfStamper(r,fout)

    n=r.getNumberOfPages()

    cnt=0
    while( cnt< n ):
        cnt=cnt+1

        over=stamper.getOverContent(cnt)
        over.beginText()
        over.setFontAndSize(FONT,FONT_SIZE)
        over.setTextMatrix(DIFF_X,DIFF_Y)
        over.showText(lang.String.valueOf(cnt+pagenumber-1))
        over.endText()

    stamper.close()
    r.close()
    fin.close()
    fout.close()



doStamp(START_PAGE_NUMBER,infile,outfile)

実行結果のサンプル

実行方法

  1. 上記コードを nombre.py というファイル名に保存します。
  2. 実行に必要なiText-2.1.3.jar ライブラリを iTextのサイト からダウンロードしておきます。
  3. ページ番号を付加したいPDFファイルを用意しておきます。 (ここでは、test.pdf とします。)

これら全部をカレントディレクトリに配置したら、以下のようにして実行。

$ export CLASSPATH=iText-2.1.3.jar; jython nombre.py test.pdf result.pdf

結果は、result.pdf に作成されます。

出力結果を微調整

コードの先頭にある変数の値を書き換えることで以下のことを調整できます。

START_PAGE_NUMBER=1

たとえば、1ページ目を「6」からナンバリングしていきたい場合。

START_PAGE_NUMBER=6

として実行し直します。

DIFF_X,DIFF_Y

ページ番号挿入位置は、用紙の左下にしています。 DIFF_X,DIFF_Yの値を調整することで、ノンブルのスタンプ位置を調整できます。

FONT_SIZE

ノンブルのフォントサイズが大きすぎるとか小さすぎる場合は、 この値を調整します。

実行環境

Java 1.4.2 で作動テストしています。

 Twitter
follow me on Twitter
 Categories