Thu, April 13, 2006
複数のPDFを一つのファイルに結合する
単純にPDFファイルを結合したいだけならば、 AcrobatReaderを使うか、pdftkなどのツールを使えばできます。
ここでは、iTextを使ってPDFを結合する方法を紹介します。
また、 iTextを簡単に使うために、jythonを使用します。
MacOSXでは、印刷できるどの書類からもPDF出力できるので便利。 しかし、別々に作成したPDFをひとつのPDFにまとめる処理ができないようなので (できる方法がある?知らないだけかもしれない。) Java(とJython)で 複数のPDFをまとめるコードを書いてみました。
MacOSXにははじめからJavaが用意されていますから...
コード cat.py
import sys
import java.io as io
import com.lowagie.text as itext
import com.lowagie.text.pdf as pdf
OUT=io.FileOutputStream("out.pdf")
pdffilelist=[]
len=len(sys.argv)
for i in range(len-1):
pdffile= sys.argv[i+1]
pdffilelist.append(pdffile)
doc=None
r=None #PdfReader
w=None #PdfCopy
cnt=0
for f in pdffilelist :
print f
r=pdf.PdfReader(f)
n = r.getNumberOfPages();
if cnt==0:
doc=itext.Document(r.getPageSizeWithRotation(1))
w = pdf.PdfCopy(doc, OUT)
doc.open()
for i in range(n):
pageNumber=i+1
page=w.getImportedPage(r, pageNumber)
w.addPage(page)
#form=r.getAcroForm()
#if form!=None:
# w.copyAcroForm(r)
cnt=cnt+1
doc.close()
OUT.close()
※アクロバットのフォームには対応していません。
実行方法
- 上記コードを cat.py というファイル名に保存します。
- 実行に必要なiText-2.1.3.jar ライブラリを iTextのサイト からダウンロードしておきます。
- 結合したいPDFファイルを用意しておきます。 (ここでは、1.pdf,2.pdfとします。)
これら全部をカレントディレクトリに配置したら、以下のようにして実行。
$ export CLASSPATH=iText-2.1.3.jar; jython cat.py 1.pdf 2.pdf
結果は、out.pdf に作成されます。
実行環境
Java 1.4.2 で作動テストしています。