Index > 複数のPDFを一つのファイルに結合する
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()

※アクロバットのフォームには対応していません。

実行方法

  1. 上記コードを cat.py というファイル名に保存します。
  2. 実行に必要なiText-2.1.3.jar ライブラリを iTextのサイト からダウンロードしておきます。
  3. 結合したい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 で作動テストしています。

 Twitter
follow me on Twitter
 Categories