リンクをクリップボードにコピー
コピー完了
お世話になります。
イラストレーターのスクリプトで次のような動作を実現させたいと考えております。
-----
開いているアートボードに、複数ページのPDFを全ページ貼り込み(リンク形式)
【環境】Windows/IlustratorCS6
-----
過去のフォーラムの会話「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("正しいページ数を入力してください。");
}
リンクをクリップボードにコピー
コピー完了
標準機能でできることをあえてスクリプトでする理由は何でしょうか?
リンクをクリップボードにコピー
コピー完了
monokano様
ありがとうございます。
申し訳ありません、こちらの投稿ですが
実は先月したものですが既に解決しておりました。
(おっしゃるとおり、基本的に標準機能で解決できました)
先月の投稿時、Adobe側の何かの規定に引っかかったのか、
最初の投稿がブロックされてしまいました。
(自分がAbobe Communityに登録して日が浅かったので
コード部分がひっかかったのかな?? と推察しています)
コード部分をタグで埋め込むようにしたら投稿できましたので、
そちらにご回答をいただいております。
本日、monokano様にご返信いただいたことで
最初の投稿が生きてしまっていることを知りました。
(どのタイミングで投稿が復活したのかは不明です)
こちらの投稿はいかがいたしましょう…
ご回答いただけた投稿のURLの
リンクを貼っておくのが良いのでしょうか?
(別の質問になってしまい申し訳ありません…)