+CADLabo.comCAD / LISP / AUTOMATION
実務LISP・自動化

PDF一括出力のLISPを組み立てる|図枠と印刷範囲

LISPで集計・自動化するのTips一覧
要点

モデル空間の図枠を検出し、1枠ずつPDFへ出力するための設計例です。掲載コードは印刷窓の計算と入力順の調整が必要なため、完成した出力ツールではありません。

始める前に

先に確認すると読み進めやすい記事:

掲載コードには図枠ごとの印刷窓の計算が含まれていません。処理の設計を学ぶための例として掲載しています。実用化には印刷範囲と-plotの入力順の補完が必要です。

確認の手順

  1. まずPLOTで図枠1つを手動出力し、用紙・尺度・印刷範囲を記録します。
  2. 図枠ブロックを検出する条件と、挿入点・尺度・回転の取得方法を確認します。
  3. 各図枠の印刷窓を計算し、使用環境の-plot入力順を組み立てます。
  4. 1枚だけ出力して照合した後、複数枚のループと保存先を確認します。

スクリプトの概要

このスクリプトは、以下の処理を順番に行います:

  • モデル空間から "A4-V" という名前のブロック参照をすべて取得
  • 追加する処理:各図枠の挿入点・尺度・回転から、印刷窓の座標を計算
  • AutoCADの -plot コマンドを使って、指定範囲をPDFとして出力
  • 出力ファイルは ブロック名_番号.pdf の形式で保存

AutoLISPコード全文

以下は処理の骨格を読むためのコードです。印刷窓の座標を計算していないため、図枠ごとのPDF出力には追加実装が必要です。

掲載コード
(defun c:BatchPlotModelSpace (/ ss i ent blkName dwgName)
  (vl-load-com)
  (setq ss (ssget "_X" '((0 . "INSERT")(2 . "A4-V")))) ; "A4-V"ブロックを選択
  (if ss
    (progn
      (setq i 0)
      (while (< i (sslength ss))
        (setq ent (ssname ss i))
        (setq blkName (vla-get-EffectiveName (vlax-ename->vla-object ent)))
        (setq dwgName (strcat (getvar "DWGPREFIX") blkName "_" (itoa i) ".pdf"))
        (command "_.-plot" "_Y" "" "DWG To PDF.pc3" "ISO_full_bleed_A4_(210.00_x_297.00_MM)" "M" "Fit" "Center" "Y" "monochrome.ctb" "Y" "N" dwgName "N" "Y")
        (setq i (1+ i))
      )
      (princ "\nPDF出力が完了しました。")
    )
    (princ "\n対象のブロックが見つかりませんでした。")
  )
  (princ)
)

コードのポイント解説

  • ssget関数で "A4-V" ブロックを全て取得
  • vla-get-EffectiveName でブロック名を取得し、ファイル名に使用
  • command関数で -plot を実行し、PDF出力を自動化
  • 出力先は現在の図面フォルダ(DWGPREFIX)で、連番付きファイル名で保存

出力結果で確認すること

印刷範囲の計算と-plotの入力を補完した後、対象の図枠ごとに別のPDFが作られるか確認します。終了メッセージが出ても、PDFの内容が正しいとは限りません。

掲載コード
PDF出力が完了しました。

もしブロックが見つからなかった場合は:

掲載コード
対象のブロックが見つかりませんでした。

応用アイデア

  • ブロック名を変更すれば、他のテンプレートにも対応可能
  • 出力サイズやスタイル(CTBファイル)をカスタマイズして、用途に合わせた印刷が可能
  • ファイル名に図面番号や日付を含めることで、管理性アップ

AutoCADの作業効率化に欠かせないAutoLISP。このような一括印刷スクリプトは、現場での「ちょっと面倒」をスマートに解決してくれます。

結果の確認

用紙サイズ、尺度、範囲、ファイル名を手動出力と比べます。掲載コードには各図枠の印刷窓の計算が含まれていません。補完するまでは一括出力に使わないでください。

参照資料

対象環境・動作確認

AutoCAD / Windows(Visual LISP・ActiveXを使用)。内容更新:2026年10月5日。掲載コードのCAD実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。