




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
原创-CAD/VBA批量打印 打印图纸,不折不扣的体力活。最多一次打了600多张图,打印机都因体力不支中途休息了几次,如果不是用程序批打,估计我也得累个半死。 下面贴出打印过程的代码,加个for循环就可以批打了。简单说明一下打印函数 PrinterName - 打印机名称 Styles - 样式表名称 MediaName - 纸张大小 Copies - 打印份数 AutoMedia - 自动纸张开关 AutoRotate - 自动旋转,纵向/横向 AutoClose - 打印完毕关闭文档 AutoFrame - 自动判断图框,主要针对图框为块的情形 打印过程并没有提供全部的AUTO CAD打印选项,因为我一般用不到,比如打印偏移、打印到文件我从来不用的,如果需要可以添加进去。 程序会根据指定块名查找图框,也可以根据块的纵横比例自动判断是否为图框,然后按块打印,一张图纸中允许有多个图框; 对于编组(Group)形式的图框,指定编组名即可 如果没有找到任何图框块或编组时,按图纸范围打印 另外,打印时会先预览,然后由用户选择是否打印,避免打错。代码如下 - By:忽又一天 /suddenday/Sub 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 = AcDbBlockRefer
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高校思政课程的立德树人实践心得体会
- 如何利用技术提升线上教学效果心得体会
- 农业合作社年度总结会议纪要
- 2025年中国防火电缆行业市场运营态势研究报告
- 老年人康复中心钻石画活动方案
- 农业生产职业危害应急处置措施
- 糖尿病护理疾病查房
- 幼儿园学期音乐欣赏活动计划
- 2024年山东省粮食和物资储备局下属事业单位真题
- 木方模板使用注意事项及合同范文
- 中央空调多联机安装规范
- 2023年安全制度-城市客运企业主要负责人和安全生产管理人员安全考核基础题库(城市轨道交通)考试历年真题(精准考点)带答案
- (完整)开发区土地集约利用评价规程(2014年度试行)(文档良心出品)
- 电解质第九讲(偶极子转向极化)
- 综合办公室安全职责
- 初中毕业证书怎么查询电子版
- 事业单位工作人员年度考核登记表
- 远程培训学习总结(4篇)
- 全息照相与信息光学实验报告
- 2022年02月上海铁路局下属铁路疾病预防控制所公开招聘毕业生笔试参考题库含答案解析
- YY/T 1293.4-2016接触性创面敷料第4部分:水胶体敷料
评论
0/150
提交评论