已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康管理与养生保健好用知识与方法
- 2025贵州茅台员工内部招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2026-2031中国壁挂式电子制冷饮水机行业市场规模及投资前景预测分析报告
- 公共安全体系建设及社会治理创新方案
- 2025绍兴诸暨市国资产经营限公司及下属子公司招聘12名易考易错模拟试题(共500题)试卷后附参考答案
- 2025福建邵武市国建设发展限公司及子公司招聘31人易考易错模拟试题(共500题)试卷后附参考答案
- IT服务台专员培训计划
- 人力资源数据分析师人力资源信息系统HRIS数据分析报告
- 产品部产品迭代规划方案
- 制裁合规顾问岗位合规培训讲师手册
- 控制器说明书
- 10以内加减法练习题-直接打印版
- 音频处理器说明书
- 原发性中枢神经系统淋巴瘤
- 德语智慧树知到答案章节测试2023年西安理工大学
- 坚持成就梦想(励志经典)
- GB/T 21140-2017非结构用指接材
- GB/T 20019-2005热喷涂热喷涂设备的验收检查
- 北师大七年级初一数学上册-初一数学-分单元全套试卷
- 演讲希特勒的一生课件
- 穿支蒂皮瓣vs穿支筋膜蒂皮瓣课件
评论
0/150
提交评论