明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: xiaoyingzi

如何用lisp分别保存多个打印设置为打印页面设置

  [复制链接]
发表于 2012-3-9 22:41 | 显示全部楼层
留个脚印,以后有用。
发表于 2012-3-10 00:44 | 显示全部楼层
很有想法,值得学习。
发表于 2012-3-10 04:13 来自手机 | 显示全部楼层
好东西!感谢楼主共享!
 楼主| 发表于 2012-3-12 12:29 | 显示全部楼层
adc 发表于 2012-3-8 12:57
我的打印机是局域网的打印机,请问要怎样特别设置吗?我改成了自己的打印机名字和打印样式,但运行程序没 ...

修改这句就可以了
(ChangePlotConfig "\\\\打印机\\Generic 16BW-5" "白纸.ctb" "横向" "A4" "按图纸空间缩放" "居中打印")
比如你的局域网上的名为“xx”的主主机上共享了一台名为”yy“的网络打印机,可把原"\\\\打印机\\Generic 16BW-5" 改为"\\\\xx\\yy" ,当然相应的其他也要做修改
发表于 2012-4-16 15:01 | 显示全部楼层
感谢楼主的创新,刚好可有用到一些,就是希望能再创新下,能否输入命令后直接按程序设置的用窗口框选打图了,这样就更好了。毕竟有些时候只要出1或2张图,这样就更方便了

点评

你要的功能在此贴:http://bbs.mjtd.com/thread-189219-1-1.html  发表于 2024-1-11 13:05
发表于 2012-4-16 15:25 | 显示全部楼层
楼主有才。
发表于 2012-4-16 16:26 | 显示全部楼层
留个脚印!慢慢学习!
发表于 2012-5-8 09:31 | 显示全部楼层
留个脚印!慢慢学习!
发表于 2012-5-8 14:44 | 显示全部楼层
一直想搞这方面研究,都抽不出时间,这下好了,严重支持.希望楼主继续完善.
 楼主| 发表于 2012-5-9 08:50 | 显示全部楼层
新增当打印机、纸张和打印样式表设置错误时,显示当前所有打印机、纸张和打印样式表的列表,方便设置
  1. ;;; 修改当前图档的打印配置
  2. (defun ChangePlotConfig (configName styleSheet PlotRotation PaperSize Plotscale CenterPlot / app doc layout newOrigin)
  3.   (vl-load-com)
  4.   (setq app (vlax-get-acad-object)
  5.         doc (vla-get-activedocument app)
  6.         layout (vla-get-activelayout doc)
  7.   )
  8.   (vla-RefreshPlotDeviceInfo layout)
  9.   (vla-put-configname layout configName)           ;打印机
  10.   (vla-put-stylesheet layout styleSheet)           ;打印样式

  11.   (if (= "纵向" PlotRotation)
  12.       (vla-put-PlotRotation layout ac0Degrees)     ;图形方向  纵向
  13.       (vla-put-PlotRotation layout ac90Degrees)    ;图形方向  横向
  14.   )

  15.   (setq index                                      ;开始修改纸张
  16.        (vl-position (strcase PaperSize)
  17.                     (mapcar (function strcase)
  18.                             (GetPaperList1 configName)
  19.                     )
  20.       )
  21.   )
  22.   (vla-put-CanonicalMediaName layout (nth index (GetPaperList2 configName)))
  23.   (princ)

  24.   (if (= "按图纸空间缩放" Plotscale)               ;比例      按图纸空间缩放
  25.       (vla-put-standardscale layout acScaleToFit)
  26.       (progn
  27.       (vla-put-standardscale layout acVpCustomScale)
  28.       (vla-SetCustomScale layout 1 Plotscale)      ;比例      自定义比例1:Plotscale
  29.       )
  30.   )

  31.   (if (= "居中打印" CenterPlot)
  32.       (vla-put-CenterPlot layout :vlax-true)       ;居中打印
  33.       (progn
  34.       (vla-put-CenterPlot layout :vlax-false)      ;不居中打印
  35.       (setq newOrigin (vlax-make-safearray vlax-vbDouble '(0 . 1)))
  36.       (vlax-safearray-fill newOrigin (list 0 0))   ;设定打印偏移x为0,y为0
  37.       (vla-put-PlotOrigin Layout newOrigin)
  38.       )
  39.   )
  40.   ;(vla-SetWindowToPlot layout newOrigin newOrigin)
  41.   ;(vla-put-PlotType layout acWindow)               ;打印范围  窗口

  42.   (vla-put-paperunits layout acMillimeters)        ;单位      米
  43.   (vla-put-PlotWithLineweights layout :vlax-true)  ;true: 使用打印型式中的线宽来打印 false: 使用图形文件中的线宽来打印
  44. )

  45. ;;; 获得某打印机纸张类型列表, 返回形如 "过大尺寸:ISO A2  (纵向)" "过大尺寸:ISO A2  (横向)".... 的列表
  46. ;;; 例:  (setq PaperSizes (GetPaperList1 "HP DesignJet 430 (E/A0) by HP" ))
  47. (defun GetPaperList1 (configName / app canpapersizearr canpapersizelist canpapersizevar app doc index layout papersize)
  48.   (vl-load-com)
  49.   (setq app (vlax-get-acad-object)
  50.         doc (vla-get-activedocument app)
  51.         layout (vla-get-activelayout doc)
  52.   )
  53.   (vla-put-configname layout configName)  ;将打印机设为当前打印机
  54.   (vla-RefreshPlotDeviceInfo layout)
  55.   (setq CanPaperSizeVar (vla-GetCanonicalMediaNames layout)
  56.         CanPaperSizeArr (vlax-variant-value CanPaperSizeVar)
  57.         CanPaperSizeLIst (vlax-safearray->list CanPaperSizeArr)
  58.         PaperSize '()
  59.         index 0
  60.   )
  61.   (repeat (length CanPaperSizeList)
  62.           (setq Papersize (cons (vla-GetLocaleMediaName layout (nth index CanPaperSizeList)) Papersize)
  63.                 index (1+ index)
  64.           )
  65.   )
  66.   (reverse PaperSize)
  67. )

  68. ;;; 获得某打印机纸张类型列表, 返回形如 "User620" "User1644".... 的列表
  69. ;;; 例:  (setq PaperSizes (GetPaperList2 "HP DesignJet 430 (E/A0) by HP" ))
  70. (defun GetPaperList2 (configName / app canpapersizearr canpapersizelist canpapersizevar app doc layout)
  71.   (vl-load-com)
  72.   (setq app (vlax-get-acad-object)
  73.         doc (vla-get-activedocument app)
  74.         layout (vla-get-activelayout doc)
  75.   )
  76.   (vla-put-configname layout configName);将打印机设为当前打印机
  77.   (vla-RefreshPlotDeviceInfo layout)
  78.   (setq CanPaperSizeVar (vla-GetCanonicalMediaNames (vla-item (vla-get-layouts doc) "Model"))
  79.         CanPaperSizeArr (vlax-variant-value CanPaperSizeVar)
  80.         CanPaperSizeLIst (vlax-safearray->list CanPaperSizeArr)
  81.   )
  82. )

  83. ;;; 获得当前激活的布局的图纸尺寸
  84. ;;; 例:  (setq PaperSize (GetPaperSizes))
  85. (defun GetPaperSizes ( / Papersize)
  86.   (setq layout (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
  87.   (vla-RefreshPlotDeviceInfo layout)
  88.   (setq Papersize (vla-get-CanonicalMediaName layout))
  89. )

  90. ;;; 在当前布局,把当前打印设置添加到一个新的页面设置,并置为当前
  91. ;;; (addPageSetup <PageSetupName>)
  92. ;;; 例: (AddPageSetup ("PageSetupName")
  93. (defun AddPageSetup (name / space pc lay PlotConfig)
  94.   (setq app (vlax-get-acad-object)
  95.         doc (vla-get-activedocument app)
  96.         layout (vla-get-activelayout doc)
  97.   )
  98.   ; 删除已有的打印页面设置
  99.   (vlax-for pc (vla-get-plotconfigurations doc)
  100.     (if (= (strcase (vla-get-name pc)) (strcase name))
  101.         (vla-delete pc)
  102.     )
  103.   )
  104.   ; 添加到新的页面设置
  105.   (if (= (getvar "ctab") "Model")
  106.     (setq space :vlax-true
  107.           lay (vla-get-Layout (vla-get-ModelSpace
  108.                 (vla-get-activedocument (vlax-get-acad-object)))))
  109.     (setq space :vlax-false
  110.           lay (vla-get-ActiveLayout (vla-get-activedocument
  111.                 (vlax-get-acad-object))))
  112.   )
  113.   (setq pc (vla-add
  114.              (vla-get-plotconfigurations doc)
  115.              name
  116.              space))
  117.   (vla-CopyFrom pc lay)
  118.   (vla-put-name pc name)
  119.   ; 把新添加的页面设置置为当前
  120.   (setq PlotConfig (vl-catch-all-apply
  121.                      'vla-item
  122.                      (list
  123.                        (vla-get-PlotConfigurations
  124.                          doc
  125.                        )
  126.                        name
  127.                      )
  128.                    )
  129.   )
  130.   (if (not (vl-catch-all-error-p PlotConfig))
  131.       (vla-copyfrom layout PlotConfig)
  132.   )
  133. (princ)
  134. )

  135. ;;; 取得系统默认打印机
  136. (defun getcurrentprinter (/ strprint)
  137. (setq strprint
  138. (vl-registry-read
  139.     (strcat
  140.       "HKEY_CURRENT_USER\\Software\\Microsoft\"
  141.       "Windows NT\\CurrentVersion\\Windows"
  142.     )
  143.     "Device"
  144. )
  145. )
  146. (substr strprint 1 (vl-string-search "," strprint))
  147. )

  148. ;;; 取得系统全部打印机
  149. (defun getallprinters (/ return wshnetwork printlst i)
  150. (vl-catch-all-apply
  151.     '(lambda ()
  152.        (setq WshNetwork (vlax-create-object "wscript.Network"))
  153.        (setq return (vlax-invoke WshNetwork 'EnumPrinterConnections))
  154.        (setq i 1)
  155.        (vlax-release-object WshNetwork)
  156.        (repeat (/ (vlax-get return 'length) 2)
  157. (setq printlst (cons (vla-item return i) printlst))
  158. (setq i (+ 2 i))
  159.        )
  160.      )
  161. )
  162. printlst
  163. )

  164. ;;; 设置系统默认打印机
  165. (defun setcurrentprinter (printername / wshnetwork)
  166.   (if (null
  167.         (vl-catch-all-apply
  168.            '(lambda ()
  169.               (setq WshNetwork (vlax-create-object "wscript.Network"))
  170.               (vlax-invoke WshNetwork 'SetDefaultPrinter printername)
  171.             )
  172.         )
  173.       )
  174.       t
  175.   )
  176. )

  177. ;;; 取得系统全部打印样式表名
  178. (defun getallplotstyletables ()
  179.   (vlax-safeArray->list
  180.      (vlax-variant-value
  181.         (vla-Getplotstyletablenames (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-acad-object))))
  182.      )
  183.   )
  184. )

  185. ;;; 检查打印设置是否正确
  186. (defun checkplotconfig (myprintername  myplotstyletable mypapersize / papersize plotstyletable printername)
  187.   (if (member myprintername (getallprinters))
  188.       (if (not (member mypapersize (GetPaperList1 myprintername)))
  189.           (progn
  190.              (princ (strcat "\n输入的纸张【" mypapersize "】不正确!!!\n"))
  191.              (princ (strcat "\n打印机" myprintername "的所有纸张列表为:\n"))
  192.              (foreach papersize (GetPaperList1 myprintername)
  193.                  (print papersize)
  194.              )
  195.           )
  196.       )
  197.       (progn
  198.          (princ (strcat "\n输入的打印机名称【" myprintername "】不正确!!!\n"))
  199.          (princ "\n当前所有打印机名称列表为:\n")
  200.          (foreach printername (getallprinters)
  201.              (print printername)
  202.          )
  203.       )
  204.   )
  205.   (if (not (member myplotstyletable (getallplotstyletables)))
  206.       (progn
  207.          (princ (strcat "\n输入的打印样式表的文件名【" myplotstyletable "】不正确!!!\n"))
  208.          (princ "\n当前所有打印样式表文件名列表为:\n")
  209.          (foreach plotstyletable (getallplotstyletables)
  210.              (print plotstyletable)
  211.          )
  212.       )
  213.   )
  214. )

  215. ;;; 自定义快速打印设置和批量打印
  216. (defun myquickplot (printername plotstyletable plotrotation papersize plotscale CenterPlot pagesetupname)
  217.   (if (= plotscale "按图纸空间缩放")
  218.       (setq showscale "按图纸空间缩放")
  219.       (setq showscale (strcat "1:" (itoa plotscale)))
  220.   )
  221.   (if (and
  222.         (member printername (getallprinters))
  223.         (member papersize (GetPaperList1 printername))
  224.         (member plotstyletable (getallplotstyletables))
  225.       )
  226.       (progn
  227.         (ChangePlotConfig printername plotstyletable plotrotation papersize plotscale CenterPlot)
  228.         (AddPageSetup pagesetupname)
  229.         (princ (strcat "\n当前打印机" printername "," plotstyletable ","
  230.                        plotrotation "," papersize "," showscale "," CenterPlot "! "))
  231.         (princ (strcat "\n当前打印页面设置名为" pagesetupname "! "))
  232.         (if (findfile "批量打印.vlx")
  233.             (progn
  234.               (if (not (vl-vlx-loaded-p "批量打印"))
  235.                   (load (findfile "批量打印.vlx"))
  236.               )
  237.               (c:batchplot)
  238.             )
  239.         )
  240.       )
  241.       (checkplotconfig printername plotstyletable papersize)
  242.   )
  243.   (princ)
  244. )

  245. ;自定义按图幅快速打印

  246. (defun c:a1 ()
  247.   (myquickplot "\\\\HP430\\HP DesignJet 430 (E/A0) by HP"  "蜡纸.ctb" "纵向" "过大尺寸:ISO A1  (纵向)" 100 "不居中打印" "蜡纸A1")
  248.   (princ)
  249. )

  250. (defun c:a2 ()
  251.   (myquickplot "\\\\HP430\\HP DesignJet 430 (E/A0) by HP"  "蜡纸.ctb" "横向" "过大尺寸:ISO A2  (横向)" 100 "不居中打印" "蜡纸A2")
  252.   (princ)
  253. )

  254. (defun c:a3 ()
  255.   (myquickplot "\\\\打印机\\Generic 16BW-5" "白纸.ctb" "纵向" "A3" "按图纸空间缩放" "居中打印" "白纸A3")
  256.   (princ)
  257. )

  258. (defun c:a4 ()
  259.   (myquickplot "\\\\打印机\\Generic 16BW-5" "白纸.ctb" "横向" "A4" "按图纸空间缩放" "居中打印" "白纸A4")
  260.   (princ)
  261. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 12:30 , Processed in 0.682738 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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