メモ@inudaisho

君見ずや出版 / 興味次第の調べ物置き場

pdfの結合

pdfの結合
今までの成果をまとめてみた
それぞれの使いかたは最初の引数が結合してできたpdf、その後に結合させたいpdfをならべる方式に統一した。
python mergepdf.py newpdf oldpdf1 oldpdf2 oldpdf3...
みたいなかんじ。
PyPdf (python)

# -*- coding: utf-8 -*-
import urllib,re,sys,time,glob,os
from pyPdf import PdfFileWriter, PdfFileReader

sNewPdf = sys.argv[1]
aFileList = sys.argv[2:]

oPdfTemp = PdfFileWriter()
for sFile in aFileList :
    oEachPdf = PdfFileReader(file(sFile,"rb"))
    iRange = oEachPdf.getNumPages()
    for i in xrange(iRange) :
        oPdfTemp.addPage(oEachPdf.getPage(i))

oPdf = file( sNewPdf,"wb")
oPdfTemp.write(oPdf)
oPdf.close()

PDF::API2 (perl)

use strict;
use warnings;
use PDF::API2;
my $sNewPdf = shift @ARGV;
my @aFileList = @ARGV;

my $oNewPdf = PDF::API2->new();
foreach my $sFile (@aFileList){
    my $oOldPdf = PDF::API2->open($sFile);
    my $iPageCount = $oOldPdf->pages();
    for( my $iIndex = 1;$iIndex <= $iPageCount;$iIndex++){
        my $oPage = $oNewPdf->importpage($oOldPdf,$iIndex);
    }   
}
$oNewPdf->saveas($sNewPdf);

PDF::Reuse (perl)

use strict;
use utf8;
use PDF::Reuse;
my $sNewPdf = shift @ARGV;
my @aFileList = @ARGV;
#@aFileList = sort @aFileList;
prFile($sNewPdf);
foreach my $sFile (@aFileList){
    prDoc({file => $sFile});
}
prEnd();

Prawn (ruby ファイルサイズが膨らむのでおすすめしない)

require 'prawn'

aFileList = ARGV.to_a
sNewPdf = aFileList.shift 
Prawn::Document.new(:template => aFileList[0]) do
    go_to_page(page_count)
    iFileList = aFileList.length
    for iIndex in 1..iFileList-1
        iPdfLength = PDF::Reader::ObjectHash.new(aFileList[iIndex]).page_references.length;
        for iPage in 1 .. iPdfLength
            start_new_page(:template => aFileList[iIndex],:template_page=>iPage)
        end 
    end 
    render_file sNewPdf
end

その他
pdftk

pdftk oldpdf1.pdf oldpdf2.pdf .. cat output newpdf.pdf

他にもいろいろあるみたい