2つのファイル間でページを交互に表示するPDF出力ファイルを作成する

2つのファイル間でページを交互に表示するPDF出力ファイルを作成する

多数のページで構成される PDF ファイル (A と呼ぶことにします) があります。次に、1 ページで構成される 2 つ目の PDF ファイル (B と呼ぶことにします) があります。

私の目標は、次のパターンを持つ出力ファイル (これを O と呼びます) を作成することです。

O[1] = A[1]
O[2] = B[1]
O[3] = A[2]
O[4] = B[1]
O[5] = A[3]
O[6] = B[1]
O[7] = A[4]
O[8] = B[1]
...

つまり、ページ A とページ B を交互に配置したいのです。背景を説明すると、ファイル A には私が受講したコースのスライドが含まれており、水平線で塗りつぶされた 1 ページのファイル B を作成しました。

結果の出力ファイルを使用すると、スライドの右側にメモを配置できます (1 枚のシートに 2 ページ印刷するため)。

LibreOffice のすべてのページをインポートすることでこれを行うことができますが、さまざまなファイルに対して簡単に実行できるスクリプト (おそらく pdftk?) を探しています。

答え1

これはページを照合するものであり、ここではBは奇数/直訳そしてAは/裏面(OP の正確な要件を考慮すると) ただし、使用可能な B ページが十分ではありません。最初の操作で十分な回数複製する必要があります。

Aページの場合(つまり裏面)がBページの左側に表示される場合は、ガードが1つ必要です。直訳最初のページ: たとえば、追加の B ページ。

  • A のページ数を数えます。10 ページあるとします。

    つまり、合計 10+1 = 11 (または、以下の 0 から 10 まで) になるには、B フロント ページが 1 つ追加される必要があります。このカウントを自動化する方法がある場合は、以下のループの上限値として使用する必要があります。そのような方法はわかりません。

  • シェルループで最初のpdftkコマンドから複製するのに十分なBページ(Bの固有ページB1)を生成し、それらを標準出力2番目のpdftkコマンドでは標準入力B 部分については、A に沿って照合します。

    pdftk B=B.pdf cat $(for page in $(seq 0 10); do echo B1; done) output - | pdftk A=A.pdf B=- shuffle B A output O.pdf
    

    または、同じ分割をより読みやすい形式で示します。

    pdftk B=B.pdf \
          cat $(for page in $(seq 0 10); do echo B1; done) \
          output - | \
    pdftk A=A.pdf \
          B=- \
          shuffle B A \
          output O.pdf
    

    注: 明確でない場合は、シェル ループが展開されると、次のように解決されます。

    pdftk B=B.pdf cat B1 B1 B1 B1 B1 B1 B1 B1 B1 B1 B1 output - | pdftk A=A.pdf B=- shuffle B A output O.pdf
    

A と B のページの順序が逆になっている場合 (B ページではなく A ページから印刷を開始する場合)、おそらく B で 1 ページ少なく生成され (最後の B ページはおそらく不要)、最後のコマンドで にshuffle B A変更されます。shuffle A B

ここではJavaの(再)実装pdftk最近のディストリビューションにパッケージ化されている が使用されました。

関連情報