明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 664|回复: 34

[讨论] 关于PDFfactory自定义图纸尺寸(已解决)

  [复制链接]
发表于 2024-4-7 20:42 | 显示全部楼层 |阅读模式
本帖最后由 sandyvs 于 2024-4-16 12:35 编辑

陈伟大佬已找到解决办法,这下不用重新定义pc3,pmp文件就可以打任意尺寸了。



PDFfactory可以通过写入注册表添加自定义尺寸,@陈伟的帖子有提及,http://bbs.mjtd.com/thread-188520-1-1.html

问题是是需要重启cad后才能使用,但偶然发现不重启CAD也能刷新,就是用其他pc3打印机打印一下就可以了。

或者在特性那恢复下默认值也可以。

不知道有没有人研究过,是什么原因,或是更新了什么才导致PDFfactory打印尺寸列表更新的?

(defun ppsize (tufuAA Height Width / i pdfD pdfF reg-path reg-path1 reg-path2 reg-path3 tufuAA);陈伟
        (setq reg-path "HKEY_CURRENT_USER\\Software\\FinePrint Software\\")
        (setq reg-path2 "\\CustomPapers\\")
        (setq i 1)
        (repeat 15  ;重复15次,最高支持pdfFactory15
                (setq reg-path1 (strcat "pdfFactory" (itoa i))) ;pdfFactory版本号
                (setq pdfD (vl-registry-read  (strcat reg-path reg-path1) "Version"))
                ;(setq reg-path3 "chenwei-A2+5/2")
                (setq pdfF (vl-registry-read  (strcat reg-path reg-path1 reg-path2 reg-path3 ) "Width"))
                (if (and (not pdfF) pdfD)
                        (progn
                        (vl-registry-write (strcat reg-path reg-path1 reg-path2 tufuAA) "Height" Height)
                        (vl-registry-write (strcat reg-path reg-path1 reg-path2 tufuAA) "Width" Width)
                        )
                )
                (setq i (1+ i))
        )
        tufuAA
)

;;http://bbs.mjtd.com/forum.php?mo ... 8087&fromuid=338795
;;; 获得某打印机纸张类型列表, 返回形如 "过大尺寸:ISO A2  (纵向)" "过大尺寸:ISO A2  (横向)".... 的列表
;;; 例:  (setq PaperSizes (GetPaperList1 "HP DesignJet 430 (E/A0) by HP" ))
(defun GetPaperList1 (configName / app canpapersizearr canpapersizelist canpapersizevar app doc index layout papersize)
  (vl-load-com)
  (setq app (vlax-get-acad-object)
        doc (vla-get-activedocument app)
        layout (vla-get-activelayout doc)
  )
  (vla-put-configname layout configName)  ;将打印机设为当前打印机
  (vla-RefreshPlotDeviceInfo layout)
  (setq CanPaperSizeVar (vla-GetCanonicalMediaNames layout)
        CanPaperSizeArr (vlax-variant-value CanPaperSizeVar)
        CanPaperSizeLIst (vlax-safearray->list CanPaperSizeArr)
        PaperSize '()
        index 0
  )
  (repeat (length CanPaperSizeList)
          (setq Papersize (cons (vla-GetLocaleMediaName layout (nth index CanPaperSizeList)) Papersize)
                index (1+ index)
          )
  )
  (reverse PaperSize)
)


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


  (setq acaddoc (vla-get-activedocument (vlax-get-acad-object)))
  (setq plot (vla-get-plot acaddoc))
  (setq clayout (vla-get-activelayout acaddoc))
  (setq 2pt (list (getpoint)(getpoint)))


  (setq llur (list (apply 'mapcar (cons 'min 2pt) ) (apply 'mapcar (cons 'max 2pt))))
  (setq ppWidth (abs (- (caar llur) (caadr llur))))
  (setq ppHeight (abs (- (cadar llur)  (cadadr llur))))
  (setq papername "自定义")
  (ppsize  papername  (fix (* 1000 ppWidth)) (fix (* 1000  ppHeight)) )
  (chaxundayingshebei)
  (setq index (vl-position (strcase papername) (mapcar (function strcase) (GetPaperList1 "pdfFactory Pro.pc3") )));pdfFactory Pro.pc3只能加两个,之后就加不进去了
  (vla-put-CanonicalMediaName clayout (nth index (GetPaperList2 "pdfFactory Pro.pc3")))



暂时找到一种方法,但是太慢了。。


;;所有的
;(GetAllMediaNames (vla-get-activedocument (vlax-get-acad-object)))
(defun GetAllMediaNames (ad / al cn pd apmn)
        (setq al (vla-get-activelayout ad))
        (setq cn (vla-get-configname al))
        (foreach pd (GetPlotDevices ad)
                (if (/= pd "None")
                        (progn
                                (vla-put-configname al pd)
                                (setq apmn (cons pd apmn))
                                (setq apmn (cons (GetCanonicalMediaNames ad) apmn))
                        )
                )
        )
        (if (/= cn "None") (vla-put-configname al cn))
        (reverse apmn)
)




; (AllLocalMediaNames (vla-get-activedocument (vlax-get-acad-object)))
(defun AllLocalMediaNames(ad / al cn pd apmn)
        (setq al (vla-get-activelayout ad))
        (setq cn (vla-get-configname al))
        (foreach pd (GetPlotDevices ad)
        (if (/= pd "None")
        (progn
        (vla-put-configname al pd)
        (setq apmn (cons pd apmn))
        (setq apmn (cons (GetLocaleMediaNames ad) apmn))
        )))
        (if (/= cn "None") (vla-put-configname al cn))
        (reverse apmn)
)


;;"图纸尺寸"定义的本地名称
(defun GetLocaleMediaNames (ad / mn mnl)
        (setq la (vla-item (vla-get-layouts ad) "Model"))
        (foreach mn (GetCanonicalMediaNames ad)
                (setq mnl (cons (vla-GetLocaleMediaName la mn) mnl))
        )
        (reverse mnl)
)


;;所有的打印机设置.(设置,不是名称!)
;;(GetPlotDevices (vla-get-activedocument (vlax-get-acad-object)))
(defun GetPlotDevices (ad)
        (vla-RefreshPlotDeviceInfo (vla-get-activelayout ad))
        (vlax-safearray->list (vlax-variant-value (vla-getplotdevicenames
                (vla-item (vla-get-layouts ad) "Model"))))
)






点评

不重启CAD写入注册表后偶尔也可以更新,小概率!!很奇怪  发表于 2024-4-12 09:27
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-4-13 19:01 | 显示全部楼层
本帖最后由 陈伟 于 2024-4-15 09:10 编辑

不重启CAD更新纸张 目前WIN7 WIN10均成功,原理,切换打印设备,需要切换至带.pc3的打印设备,不能是临时设备,如我的CAD打印设备中的红色粗字部分("无" "OneNote for Windows 10" "pdfFactory Pro" "Microsoft XPS Document Writer" "Microsoft Print to PDF" "Fax" "pdfFactory Pro (临时).pc3" "AutoCAD PDF (General Documentation).pc3" "AutoCAD PDF (High Quality Print).pc3" "AutoCAD PDF (Smallest File).pc3" "AutoCAD PDF (Web and Mobile).pc3" "Default Windows System Printer.pc3" "DWF6 ePlot.pc3" "DWFx ePlot (XPS Compatible).pc3" "DWG To PDF.pc3" "PS.pc3" "PublishToWeb JPG.pc3" "PublishToWeb PNG.pc3" "syzpdf.pc3" "VitalPDF.pc3")






(defun GetPlotDevices ()
  (setq dayingshebei (vlax-safearray->list
    (vlax-variant-value
      (vla-getplotdevicenames
(vla-item (vla-get-layouts
      (vla-get-activedocument (vlax-get-acad-object))
    ) "Model")))))
)

(defun chaxundayingshebei ()
(setq printDTP (findfile(strcat (vl-registry-read (strcat "HKEY_CURRENT_USER\\" (vlax-product-key)) "RoamableRootFolder")"Plotters\\DWG To PDF.pc3")))
(IF  printDTP(vla-put-configname (vla-get-activelayout (vla-get-activedocument (vlax-get-Acad-object))) "DWG To PDF.pc3"))
(IF (NOT printDTP)(progn(GetPlotDevices)
(setq i 0)
(repeat (length dayingshebei)
(setq printlst (nth i dayingshebei))
(setq printlst1  (vl-string-search ".pc3" printlst) )
(IF  printlst1(PRINC (STRCAT "\nPlotDevices:" printlst )))
(IF  printlst1(vla-put-configname (vla-get-activelayout (vla-get-activedocument (vlax-get-Acad-object))) printlst))
(setq i (+ 1 i)))
))
)
(chaxundayingshebei)

评分

参与人数 1明经币 +1 收起 理由
sandyvs + 1 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-4-16 12:26 | 显示全部楼层
本帖最后由 sandyvs 于 2024-4-16 12:29 编辑
陈伟 发表于 2024-4-13 19:01
不重启CAD更新纸张 目前WIN7 WIN10均成功,原理,切换打印设备,需要切换至带.pc3的打印设备,不能是临时设 ...

刚开始不行,恢复了下PDFfactory默认值可以了

本帖子中包含更多资源

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

x
发表于 2024-4-7 21:57 | 显示全部楼层
不用这个打印机啦,官方自带dwg to pdf,只要是高版本acad打印质量比这个打印机还好
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-4-12 11:58 | 显示全部楼层
陈伟 发表于 2024-4-12 09:47
问题是是需要重启cad后才能使用,但偶然发现不重启CAD也能刷新,就是用其他打印机打印一下就可以了。

得每次添加新尺寸都得这样吧?再试试把pdffactory.pc3恢复默认值试试,是不是就不用了

点评

打印一次后再增加或删除纸张就必须重启才能更新,感觉无解  发表于 2024-4-17 17:38
恢复默认值WIN7 WIN10都成功  发表于 2024-4-12 18:40
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2024-4-7 22:03 | 显示全部楼层
你有种再说一遍 发表于 2024-4-7 21:57
不用这个打印机啦,官方自带dwg to pdf,只要是高版本acad打印质量比这个打印机还好

嗯,还比这个省墨,就是再研究一样合并pdf
发表于 2024-4-7 22:13 | 显示全部楼层
sandyvs 发表于 2024-4-7 22:03
嗯,还比这个省墨,就是再研究一样合并pdf

在c#做只需要引入一些nuget包实现合并PDF,用lisp就...调用c#封装的nuget包
 楼主| 发表于 2024-4-7 22:17 | 显示全部楼层
你有种再说一遍 发表于 2024-4-7 22:13
在c#做只需要引入一些nuget包实现合并PDF,用lisp就...调用c#封装的nuget包

啊..C#只学了一点点,年纪大了,没那么大精力,也没那么多时间。。
发表于 2024-4-7 23:39 | 显示全部楼层
你有种再说一遍 发表于 2024-4-7 21:57
不用这个打印机啦,官方自带dwg to pdf,只要是高版本acad打印质量比这个打印机还好

问题是多文档批量打印时,用自带的这个打印机无法解决重命名问题,不能实现全图纸批量打印。
发表于 2024-4-7 23:48 | 显示全部楼层
lzspain 发表于 2024-4-7 23:39
问题是多文档批量打印时,用自带的这个打印机无法解决重命名问题,不能实现全图纸批量打印。

循环打印机就可以了,都那么多年了,有啥问题都解决过了
发表于 2024-4-8 07:29 | 显示全部楼层
cad不是按照国人的画图习惯设计的,老外用cad大多都是一图一布局一文件,用发布就解决了,很少把很多图都放在一起。
发表于 2024-4-8 08:05 | 显示全部楼层
priprinter不香吗
 楼主| 发表于 2024-4-8 09:04 | 显示全部楼层

到是安装着呢,就是不知道怎么添加自定义尺寸(用代码)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-1 05:10 , Processed in 1.098316 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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