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版で問題なく機能していました。
スクリプトを自作して業務効率を図ると、ちょっとストレス軽減です。

Categories: DTP, Script関連, TipsPublished On: 2026年2月 26日By
DTP Tips
  • Adobe illustratorに配置した画像を同名のPDFに一括置き換え!

    2026年2月26日

  • バラバラのテキストをつないで1つに!

    2026年2月4日

  • Adobe illustrator Beta版「ターンテーブル」を使ってみた!

    2025年11月6日

  • Illustratorでつくる文字の囲み枠

    2024年8月22日

  • ドキュメントプロファイルを使って
    新規作業のストレスを軽減しよう

    2024年8月19日

WEB Tips
  • モヤッとする、あれ。JS+CSSで「項目間だけ線」をスッキリ解決!

    2025年8月8日

  • WordPressサイトをGoogle検索から除外したい?
    「robots.txt」の正しい活用方法

    2025年7月3日

  • WordPressで記事を投稿してみよう!

    2025年6月26日

  • WordPressアップデートしてますか?

    2024年8月9日

取り組み
  • 小学校低学年向け夏休みカレンダー2025を配付します

    2025年6月20日