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

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

複数ページのPDFファイルをAと呼びます。次に、単一ページで構成される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には私が講義した講義のスライドが含まれており、ファイルBは1ページだけ水平線で埋められています。

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

LibreOfficeは各ページをインポートできますが、他のファイルを簡単に実行できるスクリプト(おそらくpdftk?)を探しています。

答え1

これはページ構成に関するもので、ここでBは次のように使用されます。奇妙な/職場そしてAはでも/反対側(OPの正確な要件に応じて)利用可能なBページが不足している場合:最初のジョブから十分な回数だけコピーする必要があります。

ページA(だから反対側)がページBの左側に表示されている場合は、ガードが必要です。職場最初のページ:たとえば、追加のページBです。

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

    これは合計10 + 1 = 11(または以下のように0〜10)を意味し、追加のBページが必要です。この計算を自動化する方法がある場合は、下のループの上限値として使用する必要があります。私はそのような方法がわからない。

  • シェルループは、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最近のリリースに含まれているアイテムを使用しました。

関連情報