2026年2月26日
Adobe illustrator
Adobe illustratorに配置した画像を同名のPDFに一括置き換え!
Adobe illustratorに配置した画像を同名のPDFに一括置き換え!
作業の都合上、レイアウトは画像(JPEG)を配置し行うが、最終的にPDFに配置しなおしたい…
こんな希な作業をしなければならないのは印刷屋ならでは、と思いますが…
例えば、こんなケースが発生したとします。
「市町村の分割地図をPDFでお渡しします。これをつないで、市全体の大きな地図を作って背景としてください」
これは、防災マップを作成する案件の一コマ。
地図(GSIから出力されたメッシュで分割されたPDF)のデータをつなぐために、一旦PDFのままイラストレーターに配置してパズルのように…
しかし、GSIの地図データをPDFに変換したものは、非情に複雑でこれを100枚近くイラストレーターでつなぎ合わせる作業は、実際、破綻した作業になります。重すぎて動きません。
そこで、PDFを一度「画像」にすることで作業の軽量化が図れます。
そもそも、統合した全体地図をA3サイズの背景にした防災マップなら、画像のままで印刷しても、さして問題ありませんが、もし「PDFに配置しなおした状態も保存しておきたい」と思うのであれば、スクリプト一括作業が便利です。
画像とPDFを同一名、拡張子違いの状態にできればScriptで一発解決!
今回作成したスクリプトは、同一名の画像とPDFが同じデレクトリに格納されている事が条件。
名称を変更してしまうことが問題なければ、Macの場合はとっても簡単。
ファイルを複数選択して、右クリックで「名称変更」を選択すると、リネーマーが起動します。
今回のケースは、バラバラの地図データを一度Acrobatでワンファイルに結合し、画像として書き出し、さらに結合したPDFをページ抽出で個別に保存。
こうすることで、連番がリンクする画像群とPDF群が作成できます。
しかし、画像の連番名称とPDFの連番名称が異なるため、先ほどのリネーマーで同じ名称の連番データを作成しておきます。
あとはイラストレーター側で画像を配置し綺麗に並べて準備OK。
スクリプトは以下のように書きました。
#target illustrator
(function () {
if (app.documents.length === 0) {
alert("ドキュメントが開かれていません");
return;
}
var doc = app.activeDocument;
// 置換対象のPDFを探すフォルダ
// 1) 画像のリンク元フォルダ内で探す(基本)
// 2) 見つからない場合、ユーザーに「PDFフォルダ」を選ばせる(任意)
var fallbackFolder = null; // nullのままなら「リンク元のみ」検索
// 実行オプション
var opts = {
// 同名判定:拡張子違いで同じベース名なら対象
// ex: "a.b.c.png" -> base "a.b.c"
pdfExt: ".pdf",
// 置換できた後にリンク更新
updateLinks: true,
// 置換できなかったものを最後にレポート表示
report: true
};
var placed = collectPlacedItems(doc);
if (placed.length === 0) {
alert("配置(リンク)アイテムが見つかりませんでした。");
return;
}
var replaced = 0;
var skipped = 0;
var missing = [];
for (var i = 0; i < placed.length; i++) {
var it = placed[i];
// すでにPDFならスキップ(必要なら外してOK)
var curFile = safeFile(it);
if (!curFile) { skipped++; continue; }
var curName = curFile.name; // 例: graph.png
var base = stripExt(curName); // graph
var targetPdfName = base + opts.pdfExt; // graph.pdf
// まずはリンク元フォルダで探す
var folder = curFile.parent;
var target = File(folder.fsName + "/" + targetPdfName);
// 見つからない場合のフォールバック
if (!target.exists && fallbackFolder) {
target = File(fallbackFolder.fsName + "/" + targetPdfName);
}
if (!target.exists) {
missing.push(curName + " -> " + targetPdfName);
continue;
}
// relink(置換)
try {
it.file = target;
// PDFのページ指定などは Illustrator 側の既定挙動
// 複数ページPDFを扱うなら、事前に「1ページPDF」を用意するのが安全
replaced++;
} catch (e) {
missing.push(curName + " -> " + targetPdfName + "(エラー: " + e + ")");
}
}
// リンク更新
if (opts.updateLinks) {
try { doc.relink(); } catch (e) {}
try { doc.embedPlacedItems(); } catch (e) {
// embedは好みが分かれるので、不要なら削除してください
}
}
// レポート
var msg = "完了。\n\n"
+ "配置アイテム数: " + placed.length + "\n"
+ "置換成功: " + replaced + "\n"
+ "未置換: " + (missing.length) + "\n";
if (opts.report && missing.length > 0) {
msg += "\n未置換リスト(同名PDFが見つからない等):\n- " + missing.join("\n- ");
}
alert(msg);
// ===== util =====
function collectPlacedItems(doc) {
var out = [];
// placedItems は「配置」だけ拾う(リンク画像/リンクPDF含む)
// グループ内も含めてドキュメント全体から取得
for (var i = 0; i < doc.placedItems.length; i++) {
out.push(doc.placedItems[i]);
}
return out;
}
function safeFile(placedItem) {
// 画像が埋め込みになっていると file が取れない場合がある
try {
if (placedItem.file) return placedItem.file;
} catch (e) {}
return null;
}
function stripExt(filename) {
// 最後のドット以降を削除
var idx = filename.lastIndexOf(".");
if (idx <= 0) return filename;
return filename.substring(0, idx);
}
})();
使い方は簡単
上記コードをテキストエディターの新規ドキュメントにペーストして、名前を付けて保存。
拡張子は、「.jsx」。例えば「replaceToPDF.jsx」なんて名称はどうでしょう?
これを、一旦デスクトップにでも保存しておいて下さい。
イラストレーター上に画像を設計通りに配置したら、配置した画像を一気にPDFに置換しましょう。
ファイルメニューの「スクリプト」内にある「その他のスクリプト」から、先ほどの「replaceToPDF.jsx」を選択。
そうすると…
一発で置換が完了します。
現状のコードは「PDFに置換」に限られています。
しかし、JPEGをTIFFに置換する、や同一デレクトリ内を検索して置換するだけでなく、例えば「高解像度」のように、別デレクトリを指定させて置換させる、などのカスタムも可能ですね。
社内ルールなど、業務の運用に合わせたカスタムも意外と簡単にできてしまいます。
Mac版のスクリプトは下記よりダウンロードしていただけます。2025版で問題なく機能していました。
スクリプトを自作して業務効率を図ると、ちょっとストレス軽減です。

