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加载时崩溃
后来我用二进制写的,用保留函数实现,这也是导致不提供源码的原因。