




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
CAD/VBACAD/VBA批量打印批量打印 打印图纸,不折不扣的体力活。最多一次打了 600 多张图,打印机都因体力不支中途休息了几次,如果不是用程序批打,估计我也得累个半死。 下面贴出打印过程的代码,加个 for 循环就可以批打了。简单说明一下打印函数 PrinterName - 打印机名称 Styles - 样式表名称 MediaName - 纸张大小 Copies - 打印份数 AutoMedia - 自动纸张开关 AutoRotate - 自动旋转,纵向/横向 AutoClose - 打印完毕关闭文档 AutoFrame - 自动判断图框,主要针对图框为块的情形 打印过程并没有提供全部的 AUTO CAD 打印选项,因为我一般用不到,比如打印偏移、打印到文件我从来不用的,如果需要可以添加进去。 程序会根据指定块名查找图框,也可以根据块的纵横比例自动判断是否为图框,然后按块打印,一张图纸中允许有多个图框; 对于编组(Group)形式的图框,指定编组名即可 如果没有找到任何图框块或编组时,按图纸范围打印 另外,打印时会先预览,然后由用户选择是否打印,避免打错。 代码如下 - By:忽又一天 QuickPlot() Call PlotFunction(SHARP AR-M256, , A3, 1, True, True, False, True) End Sub Sub Plot2PDF() Call PlotFunction(pdfFactory 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, AutoRotate 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 ThisDrawing.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 Not 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.PlotRotation = ac90degrees 横向 objLayout.PlotRotation = ac270degrees 设置图纸打印比例 objLayout.StandardScale = acScaleToFit objLayout.UseStandardScale = True 使用标准打印比例 objLayout.UseStandardScale = False 使用自定义打印比例 设置自定义打印比例 objLayout.SetCustomScale txtNumerator.Value, txtDenominator.Value 设置图纸是否居中打印 objLayout.CenterPlot = 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.QuietErrorMode = 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.GetBoundingBox 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 & Items: & 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 + 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 ptMax(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.DisplayPlotPreview 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.ConfigName 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 块名不符时由大小比例判断是否为图框(可能会误判,不过几率不高) If IsFrame = False And AutoMode And entobj.ObjectName = AcDbBlockRefere
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政协组织知识培训课件
- 政协提案业务知识培训课件
- 房产管理托管协议
- 高二音乐课程教学目标与实施方案
- 大规模神经数据整合方法-洞察及研究
- 广播电视节目策划方案范例
- 支付监管挑战-洞察及研究
- 企业文化培训方案设计
- 工会经审知识培训课件
- 收银员财务安全知识培训课件
- CJ/T 328-2010球墨铸铁复合树脂水箅
- 人教版(2024)七年级下册英语期末复习:主题阅读理解 刷题练习题20篇(含答案解析)
- 法人更换免责协议书
- 运营管理核心知识点
- 2025至2030年中国程控线路板市场分析及竞争策略研究报告
- 高三化学家长会课件
- 光伏电站安全培训要点
- 设计院管理规章制度手册及实施指南
- 电力工程施工安全风险管理措施
- 2025年综合窗口岗位工作人员招聘考试笔试试题(附答案)
- 新课标解读丨《义务教育道德与法治课程标准(2022年版)》解读课件
评论
0/150
提交评论