cadvba批量打印

上传人:第*** 文档编号:32683423 上传时间:2018-02-12 格式:DOCX 页数:7 大小:59.90KB
返回 下载 相关 举报
cadvba批量打印_第1页
第1页 / 共7页
cadvba批量打印_第2页
第2页 / 共7页
cadvba批量打印_第3页
第3页 / 共7页
cadvba批量打印_第4页
第4页 / 共7页
cadvba批量打印_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《cadvba批量打印》由会员分享,可在线阅读,更多相关《cadvba批量打印(7页珍藏版)》请在金锄头文库上搜索。

1、 打印图纸,不折不扣的体力活。最多一次打了 600 多张图,打印机都因体力不支中途休息了几次,如果不是用程序批打,估计我也得累个半死。下面贴出打印过程的代码,加个 for 循环就可以批打了。简单说明一下打印函数PrinterName - 打印机名称Styles - 样式表名称MediaName - 纸张大小Copies - 打印份数AutoMedia - 自动纸张开关AutoRotate - 自动旋转,纵向/横向AutoClose - 打印完毕关闭文档AutoFrame - 自动判断图框,主要针对图框为块的情形打印过程并没有提供全部的 AUTO CAD 打印选项,因为我一般用不到,比如 打印偏

2、移、打印到文件我从来不用的,如果需要可以添加进去。程序会根据指定块名查找图框,也可以根据块的纵横比例自动判断是否为图框,然后按块打印,一张图纸中允许有多个图框;对于编组(Group) 形式的图框,指定编组名即可如果没有找到任何图框块或编组时,按图纸范围打印另外,打印时会先预览,然后由用户选择是否打印,避免打错。代码如下 - By:忽又一天 http:/ QuickPlot() Call PlotFunction(SHARP AR-M256, , A3, 1, True, True, False, True) End Sub Sub Plot2PDF() Call PlotFunction(pd

3、fFactory Pro, acad.ctb, , 1, True, True, False, True) End Sub Sub PlotA4() Call PlotFunction(SHARP AR-M256, acad.ctb, A4, 1, False, True, False, True) End Sub 快速打印/批量打印 Public Sub PlotFunction(PrinterName As String, Styles As String, MediaName As String, Copies As Integer, _ AutoMedia As Boolean, Au

4、toRotate As Boolean, AutoClose As Boolean, AutoFrame As Boolean) On Error Resume Next Dim ptMin As Variant, ptMax As Variant Dim Ent As AcadEntity Dim PlotCount As Integer Set objDoc = ThisDrawing.Application.ActiveDocument Set objLayout = objDoc.Layouts.Item(Model) Set objPlot = objDoc.Plot ThisDra

5、wing.Application.ZoomExtents 设置打印机 If Not Trim(PrinterName) = Then objLayout.ConfigName = PrinterName Else Exit Sub End If 设置打印样式表 If Not Trim(Styles) = Then objLayout.StyleSheet = Styles Else objLayout.StyleSheet = acad.ctb End If 设置图纸尺寸 If AutoMedia Then objLayout.CanonicalMediaName = A3 Else If N

6、ot Trim(MediaName) = Then objLayout.CanonicalMediaName = MediaName Else objLayout.CanonicalMediaName = A3 End If End If 设置图纸单位 objLayout.PaperUnits = acMillimeters objLayout.PaperUnits = acInches 设置默认图纸打印方向 objLayout.PlotRotation = ac0degrees 纵向 objLayout.PlotRotation = ac180degrees objLayout.PlotRo

7、tation = ac90degrees 横向 objLayout.PlotRotation = ac270degrees 设置图纸打印比例 objLayout.StandardScale = acScaleToFit objLayout.UseStandardScale = True 使用标准打印比例 objLayout.UseStandardScale = False 使用自定义打印比例 设置自定义打印比例 objLayout.SetCustomScale txtNumerator.Value, txtDenominator.Value 设置图纸是否居中打印 objLayout.Cente

8、rPlot = True 打印时使用图形文件中的线宽 objLayout.PlotWithLineweights = True 设置是否应用打印样式 objLayout.PlotWithPlotStyles = True 打印时隐藏图纸空间对象 objLayout.PlotHidden = False 设置图纸打印份数 If Copies = 1 Then objPlot.NumberOfCopies = CInt(Copies) Else objPlot.NumberOfCopies = 1 End If 将打印错误报告切换为静默错误模式,以便不间断地执行打印任务 objPlot.Quiet

9、ErrorMode = True 重新生成当前图形 objDoc.Regen acAllViewports 设置前台打印,使打印任务按打印顺序依次发送到打印机 objDoc.SetVariable BACKGROUNDPLOT, 0 PlotCount = 0 打印计数 For Each Ent In objDoc.ModelSpace If TypeOf Ent Is AcadBlockReference Then If IsFrame(Ent, AutoFrame) = True And objDoc.Blocks(Ent.Name).count 0 Then Ent.GetBoundin

10、gBox ptMin, ptMax Debug.Print Ent.Name & - & objDoc.Blocks(Ent.Name).count 将三维点转化为二维点坐标 ReDim Preserve ptMin(0 To 1) ReDim Preserve ptMax(0 To 1) 设置打印窗口 ThisDrawing.ActiveLayout.SetWindowToPlot ptMin, ptMax objLayout.PlotType = acWindow If Abs(ptMax(0) - ptMin(0) 0 Then Debug.Print FrmGrp.Name & Ite

11、ms: & FrmGrp.count & -group 得到图框边界点坐标 FrmGrp.Item(0).GetBoundingBox ptMin, ptMax For i = 1 To FrmGrp.count - 1 FrmGrp.Item(i).GetBoundingBox TptMin, TptMax ReDim Preserve TptMin(0 To 1) ReDim Preserve TptMax(0 To 1) For j = 0 To 1 If TptMin(j) ptMax(j) Then ptMax(j) = TptMax(j) End If Next j i = i +

12、 1 Next 将三维点转化为二维点坐标 ReDim Preserve ptMin(0 To 1) ReDim Preserve ptMax(0 To 1) 设置打印窗口 ThisDrawing.ActiveLayout.SetWindowToPlot ptMin, ptMax objLayout.PlotType = acWindow If Abs(ptMax(0) - ptMin(0) 0 Then ptMax = ThisDrawing.GetVariable(EXTMAX) ptMin = ThisDrawing.GetVariable(EXTMIN) 图形范围内无实体则退出 If p

13、tMax(0) = ptMin(0) Or ptMax(1) = ptMin(1) Then Exit Sub End If 设置范围打印 objLayout.PlotType = acExtents 对纵向的图纸设置 If Abs(ptMax(0) - ptMin(0) Abs(ptMax(1) - ptMin(1) Then If AutoMedia Then objLayout.CanonicalMediaName = A4 If AutoRotate Then objLayout.PlotRotation = ac0degrees End If 完全预览并提示打印 objPlot.Di

14、splayPlotPreview acFullPreview UserSel = MsgBox(是否打印预览? & Chr(13) & Chr(13) & 打印到: & objLayout.ConfigName & _ 大小: & objLayout.CanonicalMediaName & 方式:acExtents( & objLayout.PlotType & ) & _ Chr(13) & Chr(13) & 选择 取消退出程序! , vbYesNoCancel, 打印选项) If UserSel = vbYes Then objPlot.PlotToDevice objLayout.C

15、onfigName ElseIf UserSel = vbCancel Then Exit Sub End If End If 关闭文档 False 为不保存修改 If AutoClose Then objDoc.Close False, ThisDrawing.Name End Sub Public Function IsFrame(entobj As Object, AutoMode As Boolean) As Boolean 判断是否为图框 On Error Resume Next IsFrame = False Dim i As Integer Dim FrmNameList As Variant FrmNameList = blkFrame,A1,A2,A3,A4,PC_PAPER_DIC 图框块、编组名列表 FrmNameList = Split(FrmNameList, ,) For i = 0 To UBound(FrmNameList) If entobj.Name = FrmNameList(i) Then IsFrame = True Exit For End If Next 块名不符时由大小比例判断是否为图

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号