明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 62|回复: 0

[基础] 那位大神,帮我看看下面的批量打印为什么在2007里不可用

[复制链接]
发表于 4 小时前 | 显示全部楼层 |阅读模式
那位大神,帮我看看下面的批量打印为什么在2007里不可用,出现错误: 输入的字符串有缺陷


;;; 多布局批量打印LISP脚本
;;; 功能:批量打印所有布局,每个布局一张图,自动识别图框块
;;; 使用方法:在CAD命令行输入BPLOT或BATCHPLOT运行

(defun c:BPLOT (/ *error* acadApp acadDoc layouts layout layoutName
                 plotConfigs plotConfig plotDevice paperSizes
                 paperSize plotStyleTables plotStyleTable
                 plotScale plotRotation plotOrigin plotWindow
                 plotExtents plotLimits plotDisplay plotView
                 plotLayout plotFileName plotPath plotType
                 plotToFile plotDeviceName plotPaperSize
                 plotStyleTableName plotScaleName plotRotationName
                 plotOriginName plotWindowName plotExtentsName
                 plotLimitsName plotDisplayName plotViewName
                 plotLayoutName plotFileName plotPathName
                 plotTypeName plotToFileName plotDeviceName
                 plotPaperSizeName plotStyleTableName plotScaleName
                 plotRotationName plotOriginName plotWindowName
                 plotExtentsName plotLimitsName plotDisplayName
                 plotViewName plotLayoutName plotFileName plotPathName
                 plotTypeName plotToFileName plotDeviceName plotPaperSizeName
                 plotStyleTableName plotScaleName plotRotationName
                 plotOriginName plotWindowName plotExtentsName plotLimitsName
                 plotDisplayName plotViewName plotLayoutName plotFileName
                 plotPathName plotTypeName plotToFileName plotDeviceName
                 plotPaperSizeName plotStyleTableName plotScaleName
                 plotRotationName plotOriginName plotWindowName plotExtentsName
                 plotLimitsName plotDisplayName plotViewName plotLayoutName
                 plotFileName plotPathName plotTypeName plotToFileName
                 plotDeviceName plotPaperSizeName plotStyleTableName
                 plotScaleName plotRotationName plotOriginName plotWindowName
                 plotExtentsName plotLimitsName plotDisplayName plotViewName
                 plotLayoutName plotFileName plotPathName plotTypeName
                 plotToFileName plotDeviceName plotPaperSizeName
                 plotStyleTableName plotScaleName plotRotationName
                 plotOriginName plotWindowName plotExtentsName plotLimitsName
                 plotDisplayName plotViewName plotLayoutName plotFileName
                 plotPathName plotTypeName plotToFileName plotDeviceName
                 plotPaperSizeName plotStyleTableName plotScaleName
                 plotRotationName plotOriginName plotWindowName plotExtentsName
                 plotLimitsName plotDisplayName plotViewName plotLayoutName
                 plotFileName plotPathName plotTypeName plotToFileName
                 plotDeviceName plotPaperSizeName plotStyleTableName
                 plotScaleName plotRotationName plotOriginName plotWindowName
                 plotExtentsName plotLimitsName plotDisplayName plotViewName
                 plotLayoutName plotFileName plotPathName plotTypeName
                 plotToFileName plotDeviceName plotPaperSizeName
                 plotStyleTableName plotScaleName plotRotationName
                 plotOriginName plotWindowName plotExtentsName plotLimitsName
                 plotDisplayName plotViewName plotLayoutName plotFileName
                 plotPathName plotTypeName plotToFileName)

  (vl-load-com)

  ;; 错误处理函数
  (defun *error* (msg)
    (princ (strcat "\n错误: " msg))
    (princ)
  )

  (setq acadApp (vlax-get-acad-object))
  (setq acadDoc (vla-get-ActiveDocument acadApp))

  ;; 获取所有布局
  (setq layouts (vla-get-Layouts acadDoc))

  ;; 设置打印参数
  (setq plotConfigs (vla-get-PlotConfigurations acadDoc))

  ;; 提示用户选择图框块
  (setq frameBlock (getstring "\n请输入图框块名称: "))

  ;; 检查图框块是否存在
  (if (not (tblsearch "BLOCK" frameBlock))
    (progn
      (alert (strcat "图框块 '" frameBlock "' 不存在!"))
      (exit)
    )
  )

  ;; 提示用户选择输出文件夹
  (setq plotPath (getvar "DWGPREFIX"))
  (setq plotPath (vl-string-right-trim "\\" plotPath))
  (setq plotPath (strcat plotPath "\\打印输出"))

  ;; 创建输出文件夹(如果不存在)
  (if (not (vl-file-directory-p plotPath))
    (vl-mkdir plotPath)
  )

  ;; 遍历所有布局
  (vlax-for layout layouts
    (setq layoutName (vla-get-Name layout))

    ;; 跳过模型空间
    (if (/= layoutName "Model")
      (progn
        (princ (strcat "\n正在处理布局: " layoutName))

        ;; 激活当前布局
        (vla-put-ActiveLayout acadDoc layout)

        ;; 设置打印配置
        (setq plotConfig (vla-Item plotConfigs layoutName))

        ;; 设置打印设备(使用默认打印机)
        (vla-RefreshPlotDeviceInfo plotConfig)
        (setq plotDevice (vla-get-ConfigName plotConfig))

        ;; 设置纸张大小(自动选择适合的纸张)
        (setq paperSizes (vla-getCanonicalMediaNames plotConfig))
        (setq paperSize (vlax-variant-value (vla-GetCanonicalMediaNames plotConfig)))

        ;; 设置打印样式表
        (vla-put-StyleSheet plotConfig "monochrome.ctb") ; 使用单色打印

        ;; 设置打印范围为窗口
        (vla-put-PlotType plotConfig acWindow)

        ;; 查找图框块
        (setq frameFound nil)
        (setq ss (ssget "_X" (list (cons 0 "INSERT") (cons 2 frameBlock) (cons 410 layoutName))))

        (if ss
          (progn
            (setq frameFound T)
            (setq ent (ssname ss 0))
            (setq entData (entget ent))
            (setq bbox (vla-GetBoundingBox (vlax-ename->vla-object ent) 'minPt 'maxPt))

            ;; 设置打印窗口为图框范围
            (vla-SetWindowToPlot plotConfig
              (vlax-safearray->list (vlax-variant-value minPt))
              (vlax-safearray->list (vlax-variant-value maxPt)))

            ;; 设置居中打印
            (vla-put-CenterPlot plotConfig :vlax-true)

            ;; 设置打印比例为适合图纸
            (vla-put-StandardScale plotConfig acScaleToFit)
          )
          (princ (strcat "\n警告: 布局 " layoutName " 中未找到图框块 '" frameBlock "'"))
        )

        ;; 如果找到图框,则执行打印
        (if frameFound
          (progn
            ;; 设置打印到文件
            (vla-put-PlotToFile plotConfig :vlax-true)

            ;; 设置输出文件名
            (setq plotFileName (strcat plotPath "\\" (getvar "DWGNAME") "_" layoutName ".pdf"))
            (vla-put-PlotFile plotConfig plotFileName)

            ;; 执行打印
            (princ (strcat "\n正在打印布局 " layoutName " 到文件: " plotFileName))
            (vla-Plot layout)

            (princ "\n打印完成!")
          )
          (princ "\n跳过打印 - 未找到有效图框")
        )
      )
    )
  )

  (princ "\n批量打印完成!")
  (princ)
)

;; 为方便使用,设置两个命令别名
(defun c:BATCHPLOT () (c:BPLOT))
(princ "\n批量打印命令已加载,输入 BPLOT 或 BATCHPLOT 开始使用。")
(princ)

"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 14:30 , Processed in 0.173410 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表