以下のソリューションでは、pdfjamコマンドを使用して、複数の pdf ページを 1 つの pdf ページにマージします。これは、さまざまなオプションと優れたドキュメントを備えた非常に強力なコマンドです。提供された 4_P7.pdf と 4_P13.pdf の 2 つのファイルでソリューションをテストしました。merged.pdfを表示して、すべての文字が正しくフォーマットされていることを確認できます。以下のコードはデフォルトで 2x2 グリッドを使用していますが、merge を呼び出すときに grid 引数を設定することで変更できます。
from subprocess import check_output
def merge(inputs, output, grid='2x2'):
check_output(['pdfjam'] + inputs + ['--nup', grid, '--outfile', output])
merge(['4_P7.pdf', '4_P13.pdf'], 'merged.pdf')
質問のサンプル ファイルの場合のように、カスタム ポジションを実行できるかどうかについて、以下のコメントに質問がありました。質問で提供されたのと同じレイアウトが以下に実装されています。最初に 4x2 レイアウトである上部レイアウトを構築し、次に下部 2x6 レイアウトを構築し、最後にこれら 2 つのレイアウトをfinal.pdfにマージします。以下の例で使用されている pdf は、ここにあります。
from subprocess import check_output
def merge(inputs, output, grid='2x2'):
return check_output(['pdfjam'] + inputs + ['--nup', grid, '--outfile', output])
files = ['1.pdf', '2.pdf', '3.pdf', '4.pdf', '1.pdf', '2.pdf', '3.pdf', '4.pdf']
merge(files, 'top.pdf', '4x2')
files = ['1.pdf', '2.pdf', '3.pdf', '4.pdf', '5.pdf', '6.pdf', '1.pdf', '2.pdf',
'3.pdf', '4.pdf', '5.pdf', '6.pdf']
merge(files, 'bottom.pdf', '2x6')
merge(['top.pdf', 'bottom.pdf'], 'final.pdf', '1x2')