終了

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

Community Beginner ,
Jun 06, 2025 Jun 06, 2025

お世話になります。

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

-----

開いているアートボードに、複数ページの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("正しいページ数を入力してください。");
}

キーワード
Win , スクリプティング
169
翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jul 15, 2025 Jul 15, 2025

標準機能でできることをあえてスクリプトでする理由は何でしょうか?

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Jul 15, 2025 Jul 15, 2025
最新

monokano様

ありがとうございます。
申し訳ありません、こちらの投稿ですが
実は先月したものですが既に解決しておりました。

(おっしゃるとおり、基本的に標準機能で解決できました)

 

先月の投稿時、Adobe側の何かの規定に引っかかったのか、

最初の投稿がブロックされてしまいました。

(自分がAbobe Communityに登録して日が浅かったので

コード部分がひっかかったのかな?? と推察しています)

 

コード部分をタグで埋め込むようにしたら投稿できましたので、

そちらにご回答をいただいております。

 

本日、monokano様にご返信いただいたことで

最初の投稿が生きてしまっていることを知りました。

(どのタイミングで投稿が復活したのかは不明です)

 

こちらの投稿はいかがいたしましょう…

ご回答いただけた投稿のURLの

リンクを貼っておくのが良いのでしょうか?

(別の質問になってしまい申し訳ありません…)

 

 

 

 

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines