明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: war32

[源码] 自动判断图幅打印pdf

  [复制链接]
发表于 2020-6-17 15:49:07 | 显示全部楼层
war32 发表于 2020-6-15 20:33
代码发上来看看?

顺便我想请教您一下,我按照你那图纸格式,换成我们公司的图框后,为什么就不能生成了呢?谢谢

本帖子中包含更多资源

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

x
发表于 2020-6-17 15:49:10 | 显示全部楼层
本帖最后由 dd131028 于 2020-6-17 15:59 编辑
war32 发表于 2020-6-15 20:33
代码发上来看看?

顺便我想请教您一下,我按照你那图纸格式,换成我们公司的图框后,为什么就不能生成了呢?谢谢

本帖子中包含更多资源

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

x
发表于 2020-6-17 16:16:17 | 显示全部楼层
我将你的模板图纸打散后重新生成,然后再分图,虽然提示分图成功,但在同级目录下就是看不到分的图,不知道为什么?

本帖子中包含更多资源

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

x
发表于 2020-6-18 08:41:27 | 显示全部楼层
不好意思,我看错消息了,回复错了,实在不好意思!
发表于 2020-6-18 08:42:27 | 显示全部楼层
war32 发表于 2020-6-15 20:33
代码发上来看看?

不好意思,我看错消息,回复错了,不好意思!
发表于 2020-6-18 09:43:35 | 显示全部楼层
本帖最后由 dd131028 于 2020-6-18 09:44 编辑
war32 发表于 2020-6-15 20:33
代码发上来看看?
在你的基础上加的A0,打印时就是打印不出来,别的A1~A4都可以打印,能帮我看看那边错了吗?谢谢。。。
  1. (defun c:zx(/ en end end_data ff ffn h lujing maxp maxx maxy minp minx miny name newdname1 newdname2 p1 p2 st tufu w x x1 x2 y y1 y2 i)
  2.         (setvar "cmdecho" 0)
  3.         (setq en (ssget))
  4.         (setq i 0)
  5.         (repeat (sslength en)
  6.                 (setq end (ssname en i))
  7.                 (setq end_data (entget end))
  8.                 (vla-getboundingbox(vlax-ename->vla-object end) 'minp 'maxp)
  9.                 (setq minp (vlax-safearray->list minp)
  10.                         maxp (vlax-safearray->list maxp))
  11.                 (setq minx (car minp)
  12.                         maxx (car maxp)
  13.                         miny (cadr minp)
  14.                         maxy (cadr maxp))
  15.                 (setq w (- maxx minx)
  16.                         h (- maxy miny))
  17.                 (setq p1 minp)
  18.                 (setq p2 maxp)
  19.                 ;判断横向还是纵向,p纵向,l横向
  20.                 (setq x1 (car p1) y1 (cadr p1) x2 (car p2) y2 (cadr p2))
  21.                 (setq x (abs (- x1 x2)) y (abs (- y1 y2)) )
  22.                 (if (> y x) (setq st "p") (setq st "l"))
  23.                 ;依次拾取图号和图纸名称
  24.                 (setq name (fanhuituhao  end st))
  25.                 ;;;将选取的的图号和名称存到文件中
  26.                 (setq NewDName1 (zifutihuan (car name)))
  27.                 (setq NewDName2 (zifutihuan (cadr name)))
  28.                 (setq ffn "D:\\drawing1.xls")
  29.                 (setq ff (open ffn "a"))
  30.                 (princ "\n" ff)
  31.                 (princ newdname1 ff)
  32.                 (princ "\t" ff)
  33.                 (princ newdname2 ff)
  34.                 (princ "\t" ff)
  35.                 (close ff)
  36.                 (setq lujing (strcat "d:\\" NewDName1 "-" NewDName2))
  37.                                 (cond
  38.                                         ((vl-string-search "A0" (vlax-get-property (vlax-ename->vla-object end) "Name") ) (setq tufu "ISO expand A0 (1189.00 x 841.00 毫米)"))               
  39.                                                 ((vl-string-search "A1" (vlax-get-property (vlax-ename->vla-object end) "Name") ) (setq tufu "ISO expand A1 (841.00 x 594.00 毫米)"))
  40.                         ((vl-string-search "A2" (vlax-get-property (vlax-ename->vla-object end) "Name") ) (setq tufu "ISO expand A2 (594.00 x 420.00 毫米)"))
  41.                         ((vl-string-search "A3" (vlax-get-property (vlax-ename->vla-object end) "Name") ) (setq tufu "ISO expand A3 (420.00 x 297.00 毫米)"))
  42.                         ((vl-string-search "A4" (vlax-get-property (vlax-ename->vla-object end) "Name") ) (setq tufu "ISO expand A4 (297.00 x 210.00 毫米)"))
  43.                         (T nil)
  44.                 )
  45.                
  46.                
  47.                 (pdfplot st p1 p2 tufu lujing)
  48.           (setq i (1+ i))
  49.         )
  50.         
  51. )


  52. (defun fanhuituhao (objname fangxiang / name obj tuhao)
  53.         (setq obj (vlax-ename->vla-object objname))
  54.         
  55.         (setq name (vlax-get-property obj "Name"))
  56.         (cond ((/= (vl-string-search "A0" name ) nil) (setq tuhao (a0name obj fangxiang)))
  57.                                  ((/= (vl-string-search "A1" name ) nil) (setq tuhao (a1name obj fangxiang)))
  58.                 ((/= (vl-string-search "A2" name ) nil) (setq tuhao (a2name obj fangxiang)))
  59.                 ((/= (vl-string-search "A3" name ) nil) (setq tuhao (a3name obj fangxiang)))
  60.                 ((/= (vl-string-search "A4" name ) nil) (setq tuhao (a4name obj fangxiang)))
  61.                 ( T nil)
  62.         )
  63.         
  64. )
  65. (defun a0name (obj fangxiang / h maxp maxx maxx0 maxy maxy0 minp minx miny miny0 scl w)
  66.         (setq minx 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  67.         (vla-getboundingbox obj 'Minp 'Maxp)
  68.         (setq minp (vlax-safearray->list minp)
  69.                 maxp (vlax-safearray->list maxp)
  70.         )
  71.         (setq minx (car minp)
  72.                 maxx (car maxp)
  73.                 miny (cadr minp)
  74.                 maxy (cadr maxp))
  75.         (setq w (- maxx minx)
  76.                 h (- maxy miny))
  77.         (if (= fangxiang "l") (setq scl (/ h 841)) (setq scl (/ h 1189)) )
  78.         
  79.         (a1a2name maxx miny)
  80. )


  81. (defun a1name (obj fangxiang / h maxp maxx maxx0 maxy maxy0 minp minx miny miny0 scl w)
  82.         (setq minx 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  83.         (vla-getboundingbox obj 'Minp 'Maxp)
  84.         (setq minp (vlax-safearray->list minp)
  85.                 maxp (vlax-safearray->list maxp)
  86.         )
  87.         (setq minx (car minp)
  88.                 maxx (car maxp)
  89.                 miny (cadr minp)
  90.                 maxy (cadr maxp))
  91.         (setq w (- maxx minx)
  92.                 h (- maxy miny))
  93.         (if (= fangxiang "l") (setq scl (/ h 594)) (setq scl (/ h 841)) )
  94.         
  95.         (a1a2name maxx miny)
  96. )

  97. (defun a2name (obj fangxiang / h maxp maxx maxx0 maxy maxy0 minp minx miny miny0 scl w)
  98.         (setq minx 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  99.         (vla-getboundingbox obj 'Minp 'Maxp)
  100.         (setq minp (vlax-safearray->list minp)
  101.                 maxp (vlax-safearray->list maxp)
  102.         )
  103.         (setq minx (car minp)
  104.                 maxx (car maxp)
  105.                 miny (cadr minp)
  106.                 maxy (cadr maxp))
  107.         (setq w (- maxx minx)
  108.                 h (- maxy miny))
  109.         (if (= fangxiang "l") (setq scl (/ h 420)) (setq scl (/ h 594)) )
  110.         (a1a2name maxx miny)
  111. )
  112. (defun a3name (obj fangxiang / h maxp maxx maxx0 maxy maxy0 minp minx miny miny0 scl w)
  113.         (setq minx 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  114.         (vla-getboundingbox obj 'Minp 'Maxp)
  115.         (setq minp (vlax-safearray->list minp)
  116.                 maxp (vlax-safearray->list maxp)
  117.         )
  118.         (setq minx (car minp)
  119.                 maxx (car maxp)
  120.                 miny (cadr minp)
  121.                 maxy (cadr maxp))
  122.         (setq w (- maxx minx)
  123.                 h (- maxy miny))
  124.         (if (= fangxiang "l") (setq scl (/ h 297)) (setq scl (/ h 420)) )
  125.         (a3a4name maxx miny)
  126. )

  127. (defun a4name (obj fangxiang / h maxp maxx maxx0 maxy maxy0 minp minx miny miny0 scl w)
  128.         (setq minx 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  129.         (vla-getboundingbox obj 'Minp 'Maxp)
  130.         (setq minp (vlax-safearray->list minp)
  131.                 maxp (vlax-safearray->list maxp)
  132.         )
  133.         (setq minx (car minp)
  134.                 maxx (car maxp)
  135.                 miny (cadr minp)
  136.                 maxy (cadr maxp))
  137.         (setq w (- maxx minx)
  138.                 h (- maxy miny))
  139.         (if (= fangxiang "l") (setq scl (/ h 210)) (setq scl (/ h 297)) )
  140.         (a3a4name maxx miny)
  141. )


  142. (defun a1a2name (maxx miny / mingcheng mingcheng_data mingcheng_name mingcheng_name1 mx1 mx2 my1 my2 pt_list pt_list1 px1 px2 px3 px4 px5 px6 px7 px8 tuhao tuhao_data tuhao_name tuhao_name1 tx1 tx2 ty1 ty2)
  143.         (setq tx1 (- maxx (* scl 54)))
  144.         (setq ty1 (+ miny (* scl 10)))
  145.         (setq tx2 (- maxx (* scl 10)))
  146.         (setq ty2 (+ miny (* scl 20)))
  147.         (setq px1 (list tx1 ty1))
  148.         (setq px2 (list tx2 ty1))
  149.         (setq px3 (list tx2 ty2))
  150.         (setq px4 (list tx1 ty2))
  151.         (setq pt_list (list px1 px2 px3 px4))
  152.         (setq tuhao (ssget "cp" pt_list '((0 . "TEXT"))))
  153.         ;获得名称的四个坐标
  154.         (setq mx1 (- maxx (* scl 122)))
  155.         (setq my1 (+ miny (* scl 10)))
  156.         (setq mx2 (- maxx (* scl 62)))
  157.         (setq my2 (+ miny (* scl 28)))
  158.         (setq px5 (list mx1 my1))
  159.         (setq px6 (list mx2 my1))
  160.         (setq px7 (list mx2 my2))
  161.         (setq px8 (list mx1 my2))
  162.         (setq pt_list1 (list px5 px6 px7 px8))
  163.         (setq mingcheng (ssget "cp" pt_list1 '((0 . "TEXT"))))
  164.         ;获得图号
  165.         (setq tuhao_name (ssname tuhao 0))
  166.         (setq tuhao_data (entget tuhao_name))
  167.         (setq tuhao_name1 (assoc 1 tuhao_data))
  168.         (setq tuhao_name1 (cdr tuhao_name1))
  169.         ;获得名称
  170.         (setq mingcheng_name (ssname mingcheng 0))
  171.         (setq mingcheng_data (entget mingcheng_name))
  172.         (setq mingcheng_name1 (assoc 1 mingcheng_data))
  173.         (setq mingcheng_name1 (cdr mingcheng_name1))
  174.         (list tuhao_name1 mingcheng_name1)
  175. )
  176. (defun a3a4name (maxx miny / mingcheng mingcheng_data mingcheng_name mingcheng_name1 mx1 mx2 my1 my2 pt_list pt_list1 px1 px2 px3 px4 px5 px6 px7 px8 tuhao tuhao_data tuhao_name tuhao_name1 tx1 tx2 ty1 ty2)
  177.         (setq tx1 (- maxx (* scl 49)))
  178.         (setq ty1 (+ miny (* scl 5)))
  179.         (setq tx2 (- maxx (* scl 5)))
  180.         (setq ty2 (+ miny (* scl 15)))
  181.         (setq px1 (list tx1 ty1))
  182.         (setq px2 (list tx2 ty1))
  183.         (setq px3 (list tx2 ty2))
  184.         (setq px4 (list tx1 ty2))
  185.         (setq pt_list (list px1 px2 px3 px4))
  186.         (setq tuhao (ssget "cp" pt_list '((0 . "TEXT"))))
  187.         ;获得名称的四个坐标
  188.         (setq mx1 (- maxx (* scl 117)))
  189.         (setq my1 (+ miny (* scl 5)))
  190.         (setq mx2 (- maxx (* scl 57)))
  191.         (setq my2 (+ miny (* scl 23)))
  192.         (setq px5 (list mx1 my1))
  193.         (setq px6 (list mx2 my1))
  194.         (setq px7 (list mx2 my2))
  195.         (setq px8 (list mx1 my2))
  196.         (setq pt_list1 (list px5 px6 px7 px8))
  197.         (setq mingcheng (ssget "cp" pt_list1 '((0 . "TEXT"))))
  198.         ;获得图号
  199.         (setq tuhao_name (ssname tuhao 0))
  200.         (setq tuhao_data (entget tuhao_name))
  201.         (setq tuhao_name1 (assoc 1 tuhao_data))
  202.         (setq tuhao_name1 (cdr tuhao_name1))
  203.         ;获得名称
  204.         (setq mingcheng_name (ssname mingcheng 0))
  205.         (setq mingcheng_data (entget mingcheng_name))
  206.         (setq mingcheng_name1 (assoc 1 mingcheng_data))
  207.         (setq mingcheng_name1 (cdr mingcheng_name1))
  208.         (list tuhao_name1 mingcheng_name1)
  209. )
  210. ;;;字符替换程序
  211. (defun zifutihuan (zifu )
  212.         (while (vl-string-search "/" zifu)
  213.     (setq zifu (vl-string-subst "." "/" zifu))
  214.   )
  215.         (while (vl-string-search "\\" zifu)
  216.     (setq zifu (vl-string-subst "." "\\" zifu))
  217.   )
  218.         (while (vl-string-search "-" zifu)
  219.     (setq zifu (vl-string-subst "." "-" zifu))
  220.   )
  221.         (while (vl-string-search "Ⅱ" zifu)
  222.     (setq zifu (vl-string-subst "II" "Ⅱ" zifu))
  223.   )
  224.         (while (vl-string-search "Ⅰ" zifu)
  225.     (setq zifu (vl-string-subst "I" "Ⅰ" zifu))
  226.   )
  227.         
  228.         zifu        
  229. )
  230. (defun pdfplot (st p1 p2 tufu lujing / dayinji)
  231.         (setq dayinji "dwg to pdf.pc3")
  232.   
  233.   (command "-plot" "y"         ; 是否需要详细打印配置
  234.                 "模型"           ; 输入布局、模型名称
  235.                 dayinji         ; 输入输出设备的名称  此处例举虚拟打印机 pdfFactory Pro
  236.                 ; (lisp语言中的一个 \ 符号需要用 \\符号表示,即\=>\\)
  237.                 ; 例如:共享打印机 \\Adminstractor\Kyocera KM-2560 KX应该表示为\\\\Adminstractor\\Kyocera KM-2560 KX
  238.                 tufu           ; 输入图纸尺寸A4
  239.                 "m"           ; 输入图纸单位(I:英寸 M:毫米)
  240.                 st           ; 输入图形方向(纵向:P 横向)
  241.                 "n"           ; 是否反向打印
  242.                 "w"           ; 输入打印区域(显示:D范围:E图形界限 视图:V 窗口:W)
  243.                 p1                   ; 打印图框左下角点坐标
  244.                 p2                   ; 打印图框右上角点坐标
  245.                 "f"           ; 输入打印比例(F:布满)
  246.                 "c"           ; 输入打印偏移(居中打印:C)
  247.                 "y"           ; 是否按样式打印
  248.                 "22.ctb"           ; 输入打印样式名称
  249.                 "y"           ; 是否打印线宽
  250.                 "a"           ; 输入着色打印设置(按显示:A 线框:W
  251.                 ; 消隐:H 渲染:R)
  252.                 lujing          ; 是否打印到文件
  253.                 "n"           ; 是否保存对页面设置的修改
  254.                 "y"           ; 是否继续打印
  255.         )
  256. )
 楼主| 发表于 2020-7-28 14:46:06 | 显示全部楼层
dd131028 发表于 2020-6-17 15:49
顺便我想请教您一下,我按照你那图纸格式,换成我们公司的图框后,为什么就不能生成了呢?谢谢

那段代码只识别单行文本
 楼主| 发表于 2020-7-28 14:53:05 | 显示全部楼层
dd131028 发表于 2020-6-18 09:43
在你的基础上加的A0,打印时就是打印不出来,别的A1~A4都可以打印,能帮我看看那边错了吗?谢谢。。。

我这A0图纸打印机里的名字是"ISO A0 (841.00 x 1189.00 毫米)",不是"ISO expand A0 (1189.00 x 841.00 毫米)"
发表于 2020-7-28 15:00:19 | 显示全部楼层
任意图幅的有吗
 楼主| 发表于 2020-7-28 15:03:23 | 显示全部楼层
gason 发表于 2020-7-28 15:00
任意图幅的有吗

没有。。。用代码来设置自定义图纸不会。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 13:54 , Processed in 0.179953 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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