明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: xiaoyingzi

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

  [复制链接]
发表于 2012-6-3 12:58:56 | 显示全部楼层
本帖最后由 adc 于 2012-6-4 11:47 编辑
xiaoyingzi 发表于 2012-5-9 08:50
新增当打印机、纸张和打印样式表设置错误时,显示当前所有打印机、纸张和打印样式表的列表,方便设置

楼主麻烦帮忙看看我的绘图仪不知道怎么添加,打印机就可以正常添加

命令: a1
输入的打印机名称【DesignJet 750C C3196A】不正确!!!

当前所有打印机名称列表为:

"FX DC 250/350/400 ART4-ADV"
"Microsoft Office Document Image Writer"
"Microsoft XPS Document Writer"
"pdfFactory Pro"
"RICOH Aficio 3025 RPCS"



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-6-3 19:07:29 | 显示全部楼层
不赖不赖,学习了,顶!
发表于 2012-11-1 07:16:39 | 显示全部楼层
adc 发表于 2012-6-3 12:58
楼主麻烦帮忙看看我的绘图仪不知道怎么添加,打印机就可以正常添加

命令: a1

要加后缀.pc3
发表于 2012-12-26 17:11:14 | 显示全部楼层
很好  学习了
发表于 2014-5-30 09:54:36 | 显示全部楼层
在想着怎么改造一下这个程序实现框选多张图纸,自动匹配纸张大小,批打。
发表于 2014-6-10 15:28:00 | 显示全部楼层
修改为窗口模式以及在图纸空间,使用时打印类型为布局时出错问题。
  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.   ;;;增加打印窗口设置 by edata 2014-6-10
  25.   (setq newOrigin1 (vlax-make-safearray vlax-vbDouble '(0 . 1))
  26.         newOrigin2(vlax-make-safearray vlax-vbDouble '(0 . 1)))
  27.   (vlax-safearray-fill newOrigin1 (list 0 0))
  28.   (vlax-safearray-fill newOrigin2 (list 420 297))  
  29.   (vla-SetWindowToPlot layout newOrigin1 newOrigin2)
  30.   (vla-put-PlotType layout acWindow)               ;打印范围  窗口
  31.   ;;;判断是否为类型layout,layout会锁定下面这两项 by edata ,当然上面设置成窗口则没有此问题
  32.   (if (/= (vla-get-PlotType layout) 5)                  
  33.     (progn

  34.   (if (= "按图纸空间缩放" Plotscale)               ;比例      按图纸空间缩放
  35.       (vla-put-standardscale layout acScaleToFit)
  36.       (progn
  37.       (vla-put-standardscale layout acVpCustomScale)
  38.       (vla-SetCustomScale layout 1 Plotscale)      ;比例      自定义比例1:Plotscale
  39.       )
  40.   )

  41.   (if (= "居中打印" CenterPlot)
  42.       (vla-put-CenterPlot layout :vlax-true)       ;居中打印
  43.       (progn
  44.       (vla-put-CenterPlot layout :vlax-false)      ;不居中打印
  45.       ;(setq newOrigin (vlax-make-safearray vlax-vbDouble '(0 . 1)))
  46.       ;(vlax-safearray-fill newOrigin (list 0 0))   ;设定打印偏移x为0,y为0
  47.       (vla-put-PlotOrigin Layout newOrigin1)
  48.       )
  49.   )
  50.   )
  51.     )
  52.   ;(vla-SetWindowToPlot layout newOrigin newOrigin)
  53.   ;(vla-put-PlotType layout acWindow)               ;打印范围  窗口

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

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

  80. ;;; 获得某打印机纸张类型列表, 返回形如 "User620" "User1644".... 的列表
  81. ;;; 例:  (setq PaperSizes (GetPaperList2 "HP DesignJet 430 (E/A0) by HP" ))
  82. (defun GetPaperList2 (configName / app canpapersizearr canpapersizelist canpapersizevar app doc layout)
  83.   (vl-load-com)
  84.   (setq app (vlax-get-acad-object)
  85.         doc (vla-get-activedocument app)
  86.         layout (vla-get-activelayout doc)
  87.   )
  88.   (vla-put-configname layout configName);将打印机设为当前打印机
  89.   (vla-RefreshPlotDeviceInfo layout)
  90.   (setq CanPaperSizeVar (vla-GetCanonicalMediaNames (vla-item (vla-get-layouts doc) "Model"))
  91.         CanPaperSizeArr (vlax-variant-value CanPaperSizeVar)
  92.         CanPaperSizeLIst (vlax-safearray->list CanPaperSizeArr)
  93.   )
  94. )

  95. ;;; 获得当前激活的布局的图纸尺寸
  96. ;;; 例:  (setq PaperSize (GetPaperSizes))
  97. (defun GetPaperSizes ( / Papersize)
  98.   (setq layout (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
  99.   (vla-RefreshPlotDeviceInfo layout)
  100.   (setq Papersize (vla-get-CanonicalMediaName layout))
  101. )

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

  147. ;;; 取得系统默认打印机
  148. (defun getcurrentprinter (/ strprint)
  149. (setq strprint
  150. (vl-registry-read
  151.     (strcat
  152.       "HKEY_CURRENT_USER\\Software\\Microsoft\\"
  153.       "Windows NT\\CurrentVersion\\Windows"
  154.     )
  155.     "Device"
  156. )
  157. )
  158. (substr strprint 1 (vl-string-search "," strprint))
  159. )

  160. ;;; 取得系统全部打印机
  161. (defun getallprinters (/ return wshnetwork printlst i)
  162. (vl-catch-all-apply
  163.     '(lambda ()
  164.        (setq WshNetwork (vlax-create-object "wscript.Network"))
  165.        (setq return (vlax-invoke WshNetwork 'EnumPrinterConnections))
  166.        (setq i 1)
  167.        (vlax-release-object WshNetwork)
  168.        (repeat (/ (vlax-get return 'length) 2)
  169. (setq printlst (cons (vla-item return i) printlst))
  170. (setq i (+ 2 i))
  171.        )
  172.      )
  173. )
  174. printlst
  175. )

  176. ;;; 设置系统默认打印机
  177. (defun setcurrentprinter (printername / wshnetwork)
  178.   (if (null
  179.         (vl-catch-all-apply
  180.            '(lambda ()
  181.               (setq WshNetwork (vlax-create-object "wscript.Network"))
  182.               (vlax-invoke WshNetwork 'SetDefaultPrinter printername)
  183.             )
  184.         )
  185.       )
  186.       t
  187.   )
  188. )

  189. ;;; 取得系统全部打印样式表名
  190. (defun getallplotstyletables ()
  191.   (vlax-safeArray->list
  192.      (vlax-variant-value
  193.         (vla-Getplotstyletablenames (vla-get-ActiveLayout (vla-get-ActiveDocument (vlax-get-acad-object))))
  194.      )
  195.   )
  196. )

  197. ;;; 检查打印设置是否正确
  198. (defun checkplotconfig (myprintername  myplotstyletable mypapersize / papersize plotstyletable printername)
  199.   (if (member myprintername (getallprinters))
  200.       (if (not (member mypapersize (GetPaperList1 myprintername)))
  201.           (progn
  202.              (princ (strcat "\n输入的纸张【" mypapersize "】不正确!!!\n"))
  203.              (princ (strcat "\n打印机" myprintername "的所有纸张列表为:\n"))
  204.              (foreach papersize (GetPaperList1 myprintername)
  205.                  (print papersize)
  206.              )
  207.           )
  208.       )
  209.       (progn
  210.          (princ (strcat "\n输入的打印机名称【" myprintername "】不正确!!!\n"))
  211.          (princ "\n当前所有打印机名称列表为:\n")
  212.          (foreach printername (getallprinters)
  213.              (print printername)
  214.          )
  215.       )
  216.   )
  217.   (if (not (member myplotstyletable (getallplotstyletables)))
  218.       (progn
  219.          (princ (strcat "\n输入的打印样式表的文件名【" myplotstyletable "】不正确!!!\n"))
  220.          (princ "\n当前所有打印样式表文件名列表为:\n")
  221.          (foreach plotstyletable (getallplotstyletables)
  222.              (print plotstyletable)
  223.          )
  224.       )
  225.   )
  226. )

  227. ;;; 自定义快速打印设置和批量打印
  228. (defun myquickplot (printername plotstyletable plotrotation papersize plotscale CenterPlot pagesetupname)
  229.   (if (= plotscale "按图纸空间缩放")
  230.       (setq showscale "按图纸空间缩放")
  231.       (setq showscale (strcat "1:" (itoa plotscale)))
  232.   )
  233.   (if (and
  234.         (member printername (getallprinters))
  235.         (member papersize (GetPaperList1 printername))
  236.         (member plotstyletable (getallplotstyletables))
  237.       )
  238.       (progn
  239.         (ChangePlotConfig printername plotstyletable plotrotation papersize plotscale CenterPlot)
  240.         (AddPageSetup pagesetupname)
  241.         (princ (strcat "\n当前打印机" printername "," plotstyletable ","
  242.                        plotrotation "," papersize "," showscale "," CenterPlot "! "))
  243.         (princ (strcat "\n当前打印页面设置名为" pagesetupname "! "))
  244.         (if (findfile "批量打印.vlx")
  245.             (progn
  246.               (if (not (vl-vlx-loaded-p "批量打印"))
  247.                   (load (findfile "批量打印.vlx"))
  248.               )
  249.               (c:batchplot)
  250.             )
  251.         )
  252.       )
  253.       (checkplotconfig printername plotstyletable papersize)
  254.   )
  255.   (princ)
  256. )

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

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

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

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

  270. (defun c:a4 ()
  271.   (myquickplot "\\\\打印机\\Generic 16BW-5" "白纸.ctb" "横向" "A4" "按图纸空间缩放" "居中打印" "白纸A4")
  272.   (princ)
  273. )
发表于 2014-10-13 19:37:53 | 显示全部楼层
好贴  赞.```````````````````````````````
发表于 2014-12-24 09:40:47 | 显示全部楼层
很好的教程,谢谢分享!
发表于 2015-5-6 09:39:14 | 显示全部楼层
很好的教程,
发表于 2015-5-8 14:44:11 | 显示全部楼层
怎么增加自定义图纸尺寸的设定,比如一些加长图纸

点评

在CAD新建一个纸张尺寸,比如命名“abc"然后在此代码调用“abc"纸张  发表于 2024-1-11 13:10
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 02:46 , Processed in 0.195876 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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