Skip to main content
Participant
June 6, 2025
Answered

イラレドキュメントに複数ページのPDFを全ページ貼り込みを実現させたいです

  • June 6, 2025
  • 2 replies
  • 831 views

お世話になります。

イラストレーターのスクリプトで次のような動作を実現させたいと考えております。

-----

開いているアートボードに、複数ページのPDFを全ページ貼り込み(リンク形式)

【環境】WindowsIlustratorCS6

-----

過去のフォーラムの会話「JavaScriptで、アートボードに配置したアイテムの間隔を指定したい」などを参考にさせていただき、AIなども頼りつつ、現状以下のスクリプトになりました。

 

テストに主に使用したPDFは計14ページあるのですが、とりあえず14ページ貼り込みはされるものの、すべて1ページ目が貼り込まれてしまいます。順次、つまり1ページから14ページを1ページずつ貼り込みたいのですが可能でしょうか? アートボードは別にする必要はありませんが、アートボードを作成していった方がかえってうまくいきますでしょうか? ページ数の取得が問題なのかと思い、ユーザーに総ページ数を入れてもらう仕様にしてみましたが、うまくいかず自分としては手詰まりとなってしまいました。

 

Ilustratorで配置したPDFを加工する目的があるため、あくまでIllustrator上で実現させたいと考えております。また、CCは所持しておりますのでバージョンが上がっても問題ございません。

 

当方ほとんどjavascriptの知識がない状態で、不躾な質問となってしまい申し訳ございませんが、よろしくお願いいたします。

-----

// PDFファイル選択
var fileObjs = File.openDialog("PDFを選択してください", "*.pdf", true);
var pdfOptions = app.preferences.PDFFileOptions;
pdfOptions.pDFCropToBox = PDFBoxType.PDFMEDIABOX;

// 定規の原点を左上に設定(変更なし)
app.activeDocument.rulerOrigin = [0, 0];

// A4サイズ(mm単位)
var artboardW = 210; // ドキュメント幅(mm)
var artboardH = 297; // ドキュメント高さ(mm)
var pageW = 210; // PDFのページ幅(mm)
var pageH = 297; // PDFのページ高さ(mm)
var spreadcount = 5;  // 1行のページ数(5個並べる)

// 各ページ間の間隔(5mm固定)
var xmargin = 5; 
var ymargin = 5;

var ptPerMm = 2.83465; // mm を pt に変換する係数

// ユーザーにページ数を入力してもらう
var userInput = prompt("PDFの総ページ数を入力してください", "10");
var pdfPages = parseInt(userInput, 10); // 数値に変換

if (fileObjs && !isNaN(pdfPages)) {
    var row = 0; // 縦の段数トラッキング
    var col = 0; // 横の配置トラッキング

    for (var f = 0; f < fileObjs.length; f++) {
        var fileObj = fileObjs[f];

        for (var p = 0; p < pdfPages; p++) { // **ユーザーが入力したページ数を使用**
            var artboardIndex = p % app.activeDocument.artboards.length; // アートボードの循環
            var artboard = app.activeDocument.artboards[artboardIndex];
            var artboardRect = artboard.artboardRect;

            var startX = artboardRect[0]; // 左上原点(変更なし)
            var startY = artboardRect[1]; // 左上原点(変更なし)

            var myX1 = startX + (ptPerMm * col * (pageW + xmargin)); // 横へ並べる
            var myY1 = startY - (ptPerMm * row * (pageH + ymargin)); // 縦の移動

            pdfOptions.pageToOpen = p + 1; // **ページ指定を適切に適用**
            var myImage = app.activeDocument.placedItems.add();
            myImage.file = fileObj;
            myImage.left = myX1;
            myImage.top = myY1;

            col++; // 次の列へ移動
            if (col >= spreadcount) {
                col = 0; // 横の配置をリセット
                row++;  // 次の行へ移動
            }
        }
    }
    pdfOptions.pageToOpen = 1;
} else {
    alert("正しいページ数を入力してください。");
}

 

Correct answer Ten A

コード自体を見るに、CS6というのがうまく動かない原因です。CCにアップグレードすると動くんじゃないかと思います。もっとも、先に書いたようにPDFを編集目的で配置するのであれば直接開くのが効率的です。
ただし、配置して埋め込み経由で編集するのも同様ですがIllustratorでのPDF編集は完全なものではありませんので、諸々義注意ください。

2 replies

Ten A
Community Expert
Ten ACommunity ExpertCorrect answer
Community Expert
June 9, 2025

コード自体を見るに、CS6というのがうまく動かない原因です。CCにアップグレードすると動くんじゃないかと思います。もっとも、先に書いたようにPDFを編集目的で配置するのであれば直接開くのが効率的です。
ただし、配置して埋め込み経由で編集するのも同様ですがIllustratorでのPDF編集は完全なものではありませんので、諸々義注意ください。

Participant
June 9, 2025

Ten A様

ご返信いただき、ありがとうございます。

行き違いで返信をアップしてしまいましたが、

おかげさまで気づきを得まして、

おっしゃるとおり、CCの環境であればなんとかなりそうです。

 

>配置して埋め込み経由で編集するのも同様ですがIllustratorでのPDF編集は完全なものではありません


これは本当におっしゃるとおりで、リスクを伴うかと思いますが

お客様からの支給データがPDFのためやむなく…といったところです。

CCでの作業経験値が低いので、十分注意して作業を行うようにいたします。

 

いろいろと試行錯誤して勉強になりました。ありがとうございました。

Ten A
Community Expert
Community Expert
June 6, 2025

ひとつ質問なんですけど、Illustratorなら PDFを開くだけで各ページがアートボードに配置された状態になりますが、それではダメなんですか?

Participant
June 9, 2025

Ten A様

早速のご確認・ご回答ありがとうございます。

返信が遅れまして失礼いたしました。

おっしゃるとおり、

CC2023でためしたところ、「開く」の後に

PDF読み込みオプション」が出てきて

配置を「すべて」にすることで各ページがアートボードに

配置された状態となりました。

(普段、事情によりCS6をメインで使っており、

CCの挙動についても勉強不足でお恥ずかしいです

 

また、デフォルトでは列方向に配置されるページの数は

制御できないようでしたが、

スクリプトを使い制御可能となることを

確認いたしました。

 

ご指摘のおかげで気づきを得て

希望する結果を得ることができました。

ありがとうございました。