PDFのページ入れ替えを一括で自由自在に行う方法【Adobe Action Script】

Web・ガジェット
この記事は約10分で読めます。
スポンサーリンク

本のページを間違った順番でスキャンしてしまった、冊子印刷された書類をスキャンしたらとにかく見辛いなど、PDFの順番を入れ替えたいという場面はたまにあると思います。Adobe AcrobatやWeb上のツール等で1ページずつドラッグアンドドロップで入れ替えることはできますが、ページ数が多いとつらいものです。

そこで今回は、プログラミングを使い、どんな順番になっていようと、どれだけページ数があろうと、一瞬でページ入れ替えを完了させる方法を紹介します。Adobe Acrobat ProのAction Scriptを使用します。筆者が問題に直面した時、Action Scriptの情報が極めて少なかったので、備忘録的に残しておきます。

このページのポイント:

  • Adobe Acrobat Proが必要
  • 簡単なカスタマイズならプログラミングの知識はそこまでいらない
  • 並び方に規則さえあればどんな順番でも自動化できる
スポンサーリンク

Adobe Action Scriptの利用方法

使い方

Adobe Acrobat Proでのスクリプトの入力・使用方法を述べます。スクリプトの内容は後述します。

念のため、実行前にPDFファイルのバックアップをとっておくことをおすすめします。

Acrobatの更新により利用できない場合があるようです。その場合「表示新しい Acrobat を無効にする」を試してみてください。

  • 1
    Acrobat Proを開き、左上の「ツール」をクリックする
  • 2
    下へスクロール、「アクションウィザード」を開き、「新規カスタムコマンド」
  • 3
    「Javascriptを実行」を選択し、適当なラベルをつけ、「OK」
  • 4
    エディタが出てくるので、コードを入力し「OK」

    ※スクリプト内容は後程紹介

  • 5
    カスタムコマンドが追加されたことを確認
  • 6
    PDFを開き、サイドバーにある作成したカスタムコマンドをクリック

    ※サイドバーに表示がない場合、「その他のツール→アクションウィザード」から表示できます。

  • 7
    エディタが再度開くので、そのまま「OK」
  • 8
    新規PDFとして順番が入れ替わったファイルが開く
  • 9
    「名前を付けて保存」(Ctrl+Shift+S)で適当な場所に保存

    そのまま閉じるとせっかく作ったファイルがどっかいきます。

参考:Action Scriptとは

Adobe Action Scriptは、今や懐かしのAdobe Flashで使われていたプログラミング言語で、基本的にはJavascriptと同様の文法です。

Flashなき今ですが、まだ一部のCreative Cloud系ソフトウェアで細々と使用可能であり、Acrobat ProでもPDF操作に使えるのです。[要出典]

(追記)本ページで紹介しているのは「Adobe Action Script」そのものではない説もあります。(Javascriptとはっきり書いてありますし。)が、使えているので大きな問題ではありません。そもそも情報が極めて少ないのです。知っている方がいたら教えてください。

スポンサーリンク

サンプルコード

では、具体的なコードを紹介します。上記の方法でコードを入力して使ってください。

いずれも非破壊(もとのファイルには手を加えないスクリプト)です。ただし、実行前に念のためバックアップはとっておくことをおすすめします。

今回は例として、以下の「1」~「8」が順番に書かれた8ページのPDFを用意しました。(もちろんページ数に関係なく動作するようになっています。)

1. ページを逆順にする

スクリプト:

// Get the total number of pages in the PDF document
var pageCount = this.numPages;

// Create a new PDF document
var newDoc = app.newDoc();

// Add the pages in the correct order
for (var i = 0; i <= pageCount - 1; i++) {
    newDoc.insertPages({
        cPath: this.path,
        nStart: i,
        nEnd: i
    });
}

// Delete the blank page
newDoc.deletePages(0,0);

// Save the new PDF document
newDoc.saveAs("ReversedOrder.pdf");

実行結果:

※逆順にするだけなら印刷で「逆順に印刷」をするほうが速いと思います。

2. 奇数ページだけにする

スクリプト:

// Get the total number of pages in the PDF document
var pageCount = this.numPages;

// Set the final odd-number page
var finalPage = pageCount - 1 + (pageCount % 2);

// Create a new PDF document
var newDoc = app.newDoc();

// Add the pages in the correct order
for (var i = finalPage - 1; i >= 0; i-=2) {
    newDoc.insertPages({
        cPath: this.path,
        nStart: i,
        nEnd: i
    });
}

// Delete the blank page
newDoc.deletePages(0,0);

// Save the new PDF document
newDoc.saveAs("OnlyOdd.pdf");

実行結果:

※偶数ページのみの場合、

// Set the final odd-number page
var finalPage = pageCount - 1 + (pageCount % 2);

の部分を

// Set the final even-number page
var finalPage = pageCount - (pageCount % 2);

に変更してください。

3. 冊子形式の書類を直す

A4の書類が、A3用紙に両面印刷され、冊子印刷となっています。これをスキャンしたPDF(A3)をA4のPDFに直すことを考えます。これには少し下準備が必要です。

修正前のPDFは以下のようになっています。

まず、各ページを以下の手順でA4に分割します。

・Adobe Acrobat ProでPDFを開く
・Microsoft Print to PDFを選択
・「ポスター」とし倍率を「99%」に設定(※)
・「印刷」

※100%のままだとうまくいかないことがあります。表示が切れる等の場合はこの数字を調整してみてください。

結果、こんな感じに分割されるので、このファイルを以下のスクリプトで並び替えます。

スクリプト:

// Get the total number of pages in the PDF document
var pageCount = this.numPages;

// Create a new PDF document
var newDoc = app.newDoc();

// Add the second set of pages in the correct order
for (var k = 0; k < pageCount; k += 4) {
        newDoc.insertPages({
            cPath: this.path,
            nStart: k,
            nEnd: k
        });
        newDoc.insertPages({
            cPath: this.path,
            nStart: k + 3,
            nEnd: k + 3
        });
}

// Add the first set of pages in the correct order
for (var i = 0; i < pageCount; i += 4) {
    newDoc.insertPages({
        cPath: this.path,
        nStart: pageCount - i - 3,
        nEnd: pageCount - i - 2
    });
}

// Delete the blank page
newDoc.deletePages(0,0);

// Save the new PDF document
newDoc.saveAs("CorrectOrder.pdf");

実行結果:

並べ替え前のPDFは、全ページ数をNとして「N, 1, 2, N-1, N-2, 3, 4, N-3, …」という順番になっているので、これを適切な順番に並べ替えるスクリプトになっています。

冊子印刷を想定しているので、最初のPDFのページ数が2の倍数、分割したPDFのページ数が4の倍数であるという前提のプログラムです。

応用. 冊子形式を直す+逆順にする

応用例として、冊子形式のPDFの順番を正しく直し、そして逆順にするスクリプトを紹介します。上記の3に1を組み合わせたものです。

PDFを分割するところまでは上記と同様に行ってください。できたら以下のスクリプトで並び替えます。

スクリプト:

// Get the total number of pages in the PDF document
var pageCount = this.numPages;

// Create a temp PDF document
var newDoc = app.newDoc();

// Add the second set of pages in the correct order
for (var k = 0; k < pageCount; k += 4) {
        newDoc.insertPages({
            cPath: this.path,
            nStart: k,
            nEnd: k
        });
        newDoc.insertPages({
            cPath: this.path,
            nStart: k + 3,
            nEnd: k + 3
        });
}

// Add the first set of pages in the correct order
for (var i = 0; i < pageCount; i += 4) {
    newDoc.insertPages({
        cPath: this.path,
        nStart: pageCount - i - 3,
        nEnd: pageCount - i - 2
    });
}

// Delete the blank page
newDoc.deletePages(0,0);

// Close the temp PDF document
newDoc.closeDoc(true);

// Create a new PDF document
var newDoc2 = app.newDoc();

// Add the pages in the correct order
for (var j = 0; j <= pageCount - 1; j++) {
    newDoc2.insertPages({
        cPath: newDoc.path,
        nStart: j,
        nEnd: j
    });
}

// Delete the blank page
newDoc2.deletePages(0,0);

// Save the new PDF document
newDoc2.saveAs("CorrectAndReversedOrder.pdf");

実行結果:

スポンサーリンク

まとめ

Acrobat ProのAction Scriptはとにかく情報が少なくて、筆者も実際に苦労しました。筆者は冊子印刷のPDFを修正したかったのです。上記のコードでうまくいきました。

ChatGPTでもなかなか正確な答えは返ってこなかったので、カスタマイズの際わからなくなったら上記のコードを与えて修正してくださいと言うのが良いかと思います。

お役に立てば幸いです。

先人に感謝:
Qiita: Action Scriptを使ったら、PDFのページ並べ替え作業が劇的に短縮できる!
このページ、読んでいても面白いのでおすすめです。

タイトルとURLをコピーしました