iLogic 编程实现自动将工程图导出 PDF 到指定文件夹。首先,得先复述需求,然后给出解决方案,包括思路、代码、解释,最后总结。首先,复述需求:你希望通过 iLogic 编程,实现自动将 Inventor 工程图图纸导出为 PDF 格式,并保存到指定的文件夹中。确定导出的目标文件夹,需要处理文件夹不存在的情况(自动创建)。
获取当前打开的工程图文档,做有效性检查(确保当前文档是工程图)。
配置 PDF 导出的参数(比如导出范围、分辨率、是否包含图层等)。
执行导出操作,并处理可能的异常。
给出提示信息,告知导出结果。
接下来,编写完整的 iLogic 代码,包含注释,解释关键部分。还要说明前置条件(Inventor 环境,iLogic 编辑器),以及如何使用。引用 Inventor 的 API,处理文档类型检查。
文件夹路径的设置,建议用户修改为自己的路径。
自动创建文件夹的逻辑(System.IO.Directory.CreateDirectory)。
PDF 导出选项的配置(ExportPDFOptions)。
异常处理,避免程序崩溃。
然后,解释代码的关键部分,比如文档检查、文件夹创建、导出选项配置、导出执行、异常处理。最后总结关键点,比如路径修改、文档类型检查、异常处理的重要性。首先,复述需求:你想要通过 iLogic 编写程序,实现自动将 Inventor 工程图图纸导出为 PDF 格式文件,并将导出的 PDF 保存到你指定的文件夹中。然后,解决思路和代码:先说明思路,然后给出完整代码,再解释关键部分。代码要完整,包含注释,处理各种情况,比如当前不是工程图、文件夹不存在、导出失败等。目标文件夹路径设置:用户需要替换为自己的路径。
检查当前文档是否为工程图:避免非工程图文档执行出错。
自动创建文件夹:如果指定文件夹不存在,自动创建,防止路径不存在导致导出失败。
PDF 导出选项配置:设置导出范围(整个图纸)、分辨率、是否包含图层等。
异常处理:捕获导出过程中的错误,给出友好提示。
需修改代码中的目标文件夹路径为实际要保存的路径。
代码包含文档类型校验和文件夹自动创建,提升鲁棒性。
异常处理确保导出失败时能给出明确提示,便于排查问题。

'定义当前文档为顶层文档
Dim oAsmDoc As Document
oAsmDoc = ThisApplication.ActiveDocument
oAsmName = ThisDoc.FileName(False) 'without extension
Dim drawingformat As String
drawingformat = "idw"
'- - - - - - - - - - - - -PDF setup - - - - - - - - - - - -
oPath = ThisDoc.Path
PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")
DWFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD95-2F4D-42CE-8BE0-8AEA580399E4}")
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
xOptions = ThisApplication.TransientObjects.CreateNameValueMap
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
oDocument = ThisApplication.ActiveDocument
'定义PDF导出属性
oOptions.Value("All_Color_AS_Black") = 1
oOptions.Value("Remove_Line_Weights") = 0
oOptions.Value("Vector_Resolution") = 400
oOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintAllSheets
'定义导出文档路径
oFolder = "C:\export"
'根据检测结果创建导出文件夹
If Not System.IO.Directory.Exists(oFolder) Then
System.IO.Directory.CreateDirectory(oFolder)
End If
'- - - - - - - - - - - - -
'- - - - - - - - - - - - -下层工程图 - - - - - - - - - - - -
'循环引用当前文档所有下层零件
Dim oRefDocs As DocumentsEnumerator
oRefDocs = oAsmDoc.AllReferencedDocuments
Dim oRefDoc As Document
'打开与零件存在同一路径的工程图
For Each oRefDoc In oRefDocs
idwPathName = Left(oRefDoc.FullDocumentName, Len(oRefDoc.FullDocumentName) - 3) & drawingformat
'检测当前下层零件是否有工程图
If(System.IO.File.Exists(idwPathName)) Then
Dim oDrawDoc As DrawingDocument
oDrawDoc = ThisApplication.Documents.Open(idwPathName, True)
oFileName = IO.Path.GetFileNameWithoutExtension(oRefDoc.FullDocumentName)
On Error Resume Next ' 如果目标PDF已存在并被打开或处于只读属性,跳过当前文档
'设置PDF名字与保存路径
oDataMedium.FileName = oFolder & "" & oFileName & ".pdf"
'创建PDF
Call PDFAddIn.SaveCopyAs(oDrawDoc, oContext, oOptions, oDataMedium)
'关闭工程图
oDrawDoc.Close
Else
'无操作,如同一文件夹不存在相应工程图
End If
Next
'- - - - - - - - - - - - -
'- - - - - - - - - - - - -顶层工程图 - - - - - - - - - - - -
oAsmDrawing = ThisDoc.ChangeExtension(drawingformat)
oAsmDrawingDoc = ThisApplication.Documents.Open(oAsmDrawing, True)
oAsmDrawingName = ThisDoc.FileName(False) 'Without extension
On Error Resume Next ' 如果目标PDF已存在并被打开或处于只读属性,跳过当前文档
'设置PDF名字与保存路径
oDataMedium.FileName = oFolder & "" & oAsmDrawingName & ".pdf"
'创建PDF
Call PDFAddIn.SaveCopyAs(oAsmDrawingDoc, oContext, oOptions, oDataMedium)
drawingformat = "dwg"
'- - - - - - - - - - - - -PDF setup - - - - - - - - - - - -
oPath = ThisDoc.Path
PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")
DWFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD95-2F4D-42CE-8BE0-8AEA580399E4}")
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
xOptions = ThisApplication.TransientObjects.CreateNameValueMap
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
oDocument = ThisApplication.ActiveDocument
'定义PDF导出属性
oOptions.Value("All_Color_AS_Black") = 1
oOptions.Value("Remove_Line_Weights") = 0
oOptions.Value("Vector_Resolution") = 400
oOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintAllSheets
'定义导出文档路径
oFolder = "C:\export"
'根据检测结果创建导出文件夹
If Not System.IO.Directory.Exists(oFolder) Then
System.IO.Directory.CreateDirectory(oFolder)
End If
'- - - - - - - - - - - - -
'- - - - - - - - - - - - -下层工程图 - - - - - - - - - - - -
'循环引用当前文档所有下层零件
oRefDocs = oAsmDoc.AllReferencedDocuments
'打开与零件存在同一路径的工程图
For Each oRefDoc In oRefDocs
idwPathName = Left(oRefDoc.FullDocumentName, Len(oRefDoc.FullDocumentName) - 3) & drawingformat
'检测当前下层零件是否有工程图
If(System.IO.File.Exists(idwPathName)) Then
Dim oDrawDoc As DrawingDocument
oDrawDoc = ThisApplication.Documents.Open(idwPathName, True)
oFileName = IO.Path.GetFileNameWithoutExtension(oRefDoc.FullDocumentName)
On Error Resume Next ' 如果目标PDF已存在并被打开或处于只读属性,跳过当前文档
'设置PDF名字与保存路径
oDataMedium.FileName = oFolder & "" & oFileName & ".pdf"
'创建PDF
Call PDFAddIn.SaveCopyAs(oDrawDoc, oContext, oOptions, oDataMedium)
'关闭工程图
oDrawDoc.Close
Else
'无操作,如同一文件夹不存在相应工程图
End If
Next
'- - - - - - - - - - - - -
'- - - - - - - - - - - - -顶层工程图 - - - - - - - - - - - -
oAsmDrawing = ThisDoc.ChangeExtension(drawingformat)
oAsmDrawingDoc = ThisApplication.Documents.Open(oAsmDrawing, True)
oAsmDrawingName = ThisDoc.FileName(False) 'Without extension
On Error Resume Next ' 如果目标PDF已存在并被打开或处于只读属性,跳过当前文档
'设置PDF名字与保存路径
oDataMedium.FileName = oFolder & "" & oAsmDrawingName & ".pdf"
'创建PDF
Call PDFAddIn.SaveCopyAs(oAsmDrawingDoc, oContext, oOptions, oDataMedium)