gbbestway 发表于 2024-2-21 20:16:50

CAD2024貌似不支持ADOBE PDF打印任意尺寸的PDF了, 自定义尺寸不行. 自定尺寸以后, 还是A4的, 具体如下图所示,   哪位用2024的大神帮忙测试一下看看?

flowerson 发表于 2024-2-22 11:32:53

太厉害了。不知道大侠可以不可以告诉我们lisp读写.pmp和.pc3文件的方法呢?

zhang007 发表于 2024-2-23 09:01:59

以前一直没找到自定义打印纸张任意尺寸的方法,就用了个最笨的方法,在一台电脑上设置了大量能用得着的自定义纸张,然后把DWG To PDF.pmp、DWG To PDF.pc3拷贝到其他电脑上,再用程序寻找大小最接近的纸张来实现自动出图

baitang36 发表于 2024-2-24 06:47:01

本帖最后由 baitang36 于 2024-2-24 07:11 编辑

zhang007 发表于 2024-2-23 09:01
以前一直没找到自定义打印纸张任意尺寸的方法,就用了个最笨的方法,在一台电脑上设置了大量能用得着的自定 ...
我用的是根据图的大小去修改这两个文件。你的办法是准备很多双鞋,我的是根据脚的大小去做鞋,一双就够了。

mj0000 发表于 2024-2-27 07:28:31

感谢作者研究。昨天折腾了一天,也实现了自定义任意纸张尺寸。办法是直接用作者的函数生成pc3和pmp文件,读成表,修改尺寸参数,再写入pc3和pmp文件,直接就可以用了。刚开始还研究怎么解包打包,后来发现把文件格式直接改Unix格式就行,又研究怎么改格式,找一圈都没发现lisp有这方面资料,死马当活马,直接读文件为表,再写表,就是Unix文件了,直接就能用了。感谢作者分享技术,感谢各位大神研究

陨落 发表于 2024-2-27 10:45:14

zhang007 发表于 2024-2-23 09:01
以前一直没找到自定义打印纸张任意尺寸的方法,就用了个最笨的方法,在一台电脑上设置了大量能用得着的自定 ...

其实还有第三种思路:裁剪pdf,效果也不差。。

baitang36 发表于 2024-2-28 04:51:42

mj0000 发表于 2024-2-27 07:28
感谢作者研究。昨天折腾了一天,也实现了自定义任意纸张尺寸。办法是直接用作者的函数生成pc3和pmp文件,读 ...

能否分享一下用lsp读写unix文件?曾卡在这里很久

mj0000 发表于 2024-2-28 10:05:59

baitang36 发表于 2024-2-28 04:51
能否分享一下用lsp读写unix文件?曾卡在这里很久

也是别人的函数,具体是谁分享的也忘记了:lol都是拿来主义
;; 按行读文本文件到表 (快于 read-line 函数)
(defun VlDos_ReadFile (Fil / FilObj FilPth FilSys OpnFil All)
(if (and (setq FilPth (findfile Fil)) (setq FilSys (vlax-create-object "Scripting.FileSystemObject")))
    (progn
      (setq FilObj (vlax-invoke FilSys 'GetFile FilPth)
            OpnFil (vlax-invoke FilObj 'OpenAsTextStream 1 0) ;只读模式
            All    (car (Cov-Str2List (vlax-invoke OpnFil 'readall) '("\r\n"))) ;字符串转表
      )
      (vlax-invoke OpnFil 'Close)
      (vlax-release-object OpnFil)
      (vlax-release-object FilObj)
      (vlax-release-object FilSys)
    )
)
All
)
;; 将字符串或表写入文件 (快于 write-line 函数)
(defun VlDos_WriteFile (Fil TXT Mode / FilObj FilPth FilSys OpnFil Line)
(if TXT
    (progn
      (if (and (member mode '("w" "W")) (findfile Fil))
      (vl-file-delete (findfile Fil)) ;为T时删除原文件
      )
      (if (setq FilSys (vlax-create-object "Scripting.FileSystemObject"))
      (progn
          (if (null (setq FilPth (findfile Fil)))
            (setq OpnFil (vlax-invoke FilSys 'CreateTextFile Fil 0 0)) ;文件编码为为ASCII格式(最后一个参数控制编码 0 = ascii编码, -1 = unicode编码, -2 system default编码)
            (setq FilObj (vlax-invoke FilSys 'GetFile FilPth)
                  OpnFil (vlax-invoke FilObj 'OpenAsTextStream 8 0) ;添加模式
            )
          )
          (if OpnFil
            (progn
            (vlax-invoke OpnFil 'Write (strcat (Cov-All_To_EleStr TXT "\r\n") "\r\n")) ;尾部加换行,不然添加模式下会有重叠的行
            (vlax-invoke OpnFil 'Close)
            (vlax-release-object OpnFil)
            (if (= (type FilObj) 'vla-object)
                (vlax-release-object FilObj)
            )
            (vlax-release-object FilSys)
            )
          )
      )
      )
      (if (setq Filpth (findfile Fil))
      (setq FilPth (YX:Get-VlDos_FormatPath filpth))
      )
    )
)
filpth
)

mj0000 发表于 2024-2-28 10:14:13

补充两个子函数
Cov-Str2List by llsheng_73 -- http://bbs.mjtd.com/forum.php?mod=viewthread&tid=109842
;; 任意值转字符串
(defun Cov-All_To_EleStr (Val Str)
(if (not Str)
    (setq Str " ") ;默认分割字符
)
(cond
    ((= (type Val) 'INT) (vl-princ-to-string Val))
    ((= (type Val) 'REAL) (vl-princ-to-string Val))
    ((= (type Val) 'list) ;有子表时,递归
   (apply 'strcat
            (cons
            (Cov-All_To_EleStr (car Val) Str)
            (mapcar
                '(lambda (l) (strcat Str (Cov-All_To_EleStr l Str)))
                (cdr Val)
            )
            )
   )
    )
    ((= (type Val) 'STR) Val) ;参数是单独的一个字符串也可以,容错
    (t "")
)
)

baitang36 发表于 2024-2-28 11:07:30

mj0000 发表于 2024-2-28 10:05
也是别人的函数,具体是谁分享的也忘记了都是拿来主义
write-line会把0A自动变成0d 0a 这样unix格式就变成一般的文本格式了,导致pc3加载时崩溃
后来我用二进制写的,用保留函数实现,这也是导致不提供源码的原因。
页: 1 2 3 [4] 5 6 7 8
查看完整版本: 【原创】用纯lisp实现打印任意尺寸pdf