PDF一括出力のLISPを組み立てる|図枠と印刷範囲
要点
モデル空間の図枠を検出し、1枠ずつPDFへ出力するための設計例です。掲載コードは印刷窓の計算と入力順の調整が必要なため、完成した出力ツールではありません。
始める前に
先に確認すると読み進めやすい記事:
掲載コードには図枠ごとの印刷窓の計算が含まれていません。処理の設計を学ぶための例として掲載しています。実用化には印刷範囲と-plotの入力順の補完が必要です。
確認の手順
- まずPLOTで図枠1つを手動出力し、用紙・尺度・印刷範囲を記録します。
- 図枠ブロックを検出する条件と、挿入点・尺度・回転の取得方法を確認します。
- 各図枠の印刷窓を計算し、使用環境の-plot入力順を組み立てます。
- 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実機検証は未実施です。図形を変更する例は、コピーした図面で結果を確認してください。