Mostafa,你想打印多少DWG,以及获得它们的列表有多难/容易。它总是像某个项目一样的一组图形,还是每次都是动态的?我最近在一个项目中工作,我们需要将一个DWG的几页打印成一个PDF,这与您想要的相反,但也许我们的方法会奏效。事实上,我们确实使用了发布例程,我作弊了,并用LSP编写了一个DSD。您可以手动进行发布设置,保存该DSD,然后修改下面的代码以编写满足您需要的DSD。
- (defun c:PUBLISH_PDF ( / file ;file name for TEMP.DSD
- OldFda ;system variable FILEDIA
- pathtxt ;path where drawing is saved to write TEMP.DSD
- nosheets ;number of PDF pages to print
- *error* ;error trap
- ) ;end variables
- (vl-load-com)
- (defun *error* ( msg )
- (setvar "FILEDIA" OldFda) ;sets system variable FILEDIA back to original value
- (setvar "EXPERT" Save_Expert) ;sets system variable EXPERT back to original value
- (princ "error: ")
- (princ msg)
- (princ)
- )
- (setvar "CTAB" "Layout1") ;changes to paperspace and tab named Layout1
- (setq OldFda (getvar "FILEDIA")) ;reads current system variable FILEDIA value
- (setvar "FILEDIA" 0) ;sets FILEDIA to 0 so no dialog boxes popup
- (setq Save_Expert (getvar "EXPERT")) ;reads current system variable EXPERT value
- (setvar "EXPERT" 2) ;sets EXPERT to 2 so no dialog boxes popup
- (command "._-PSETUPIN" "c:\\folder\\template.dwt" "*") ;imports all page setups from drawing template c:\folder\template.dwt
- (setvar "EXPERT" Save_Expert) ;sets system variable EXPERT back to original value
- (setq pathtxt (strcat (getvar "dwgprefix") "TEMP.DSD")) ;sets path for DSD file from current drawing saved location
- (setq file (open (strcat (getvar "dwgprefix") "TEMP.DSD") "w")) ;opens DSD file for writing
- ;I USED A SELECTION SET HERE TO PICK A BORDER IN PAPERSPACE TO RECOGNIZE HOW MANY PAGES TO PRINT
- ;YOU'll NEED YOUR WAY OF SELECTING YOUR MULTIPLE DRAWINGS
- ;**********START OF DSD FILE**********
- ;**********START HEADER**********
- (write-line "[DWF6Version]" file)
- (write-line "Ver=1" file)
- (write-line "[DWF6MinorVersion]" file)
- (write-line "MinorVer=1" file)
- ;**********END OF HEADER**********
- ;**********START OF LAYOUTS/DWG TO PLOT********** !!!repeat this section for each of your layouts or dwgs to plot
- (write-line "[DWF6Sheet:PDF Sheet 1]" file)
- (write-line (strcat "DWG=" (getvar "dwgprefix")(substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4)) ".dwg")file)
- (write-line "Layout=Layout1" file) ;layout to plot
- (write-line "Setup=Sheet_1" file) ;page setup name to use
- (write-line (strcat "OriginalSheetPath=" (strcat(getvar "dwgprefix")(substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4))".dwg") )file)
- (write-line "Has Plot Port=0" file)
- (write-line "Has3DDWF=0" file)
- ;**********END OF 'ONE' LAYOUT TO PLOT********** !!!repeat previous section for each of your layouts or dwgs to plot
- ;**********START OF DSD FOOTER**********
- (write-line "[Target]" file)
- (write-line "Type=6" file) ;change to "TYPE=5" for multiple output files, "TYPE=6" for single output file
- (write-line (strcat "DWF=" (strcat(getvar "dwgprefix")(substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4))".pdf") )file)
- (write-line (strcat "OUT="(strcat(getvar "dwgprefix") )) file)
- (write-line "PWD=" file)
- ;**********END OF DSD FOOTER**********
- ;**********END OF DSD FILE**********
- (close file) ;closes DSD file
- (command "_.delay" 2000) ;system delay before starting publish command so DSD file closes
- (command "-Publish" pathtxt ) ;start publish command with TEMP.DSD file just created
- (setvar "FILEDIA" OldFda) ;sets system variable FILEDIA back to original value
- (command "_.delay" 2000) ;system delay before deleting TEMP.DSD so publish routine has time to release it
- (vl-file-delete pathtxt) ;deletes TEMP.DSD file
- ; (startapp "explorer /e," (getvar "dwgprefix")) ;comment out this line if you don't want file explorer to open with PDF location
- (princ)
- );defun
希望这能为你指明正确的方向。我很快就会发布一篇帖子,询问如何优化我的代码,因为我的选择集例程(这里没有显示)效率很低。
~霍维兹 |