AutoDesk Inventor – Batch Exporting PDFs & DXFs with iLogic

If you have ever had to publish a lot of Inventor IDW drawings at the same time, you will know how tedious it can be to go into each drawing and Save Copy As each file as a DXF or PDF individually.

Here is where iLogic can come to the rescue. I have written an iLogic rule that will automatically export all IDW drawings that are open in your Inventor session in a timestamped folder. Each time the rule is run it will create a new timestamped folder so that you will easily be able to find your newest exported files. The video below gives a demonstration of how it works.

To use this rule yourself, open the iLogic browser in an Inventor session. Create a new rule called Export PDF’s & DXF’s, and paste the following code into the rule before saving and running the rule. (Note This code has been edited and improved since recording the video).

Sub Main()
  Dim myDate As String = Now().ToString("yyyy-MM-dd HHmmss")
  myDate = myDate.Replace(":","")  ' & " - " & TypeString
 userChoice = InputRadioBox("Defined the scope", "This Document", "All Open Documents", True, Title := "Defined the scope")
 UserSelectedActionList = New String(){"DXF & PDF", "PDF Only", "DXF Only"}
  UserSelectedAction = InputListBox("What action must be performed with selected views?", _
          UserSelectedActionList, UserSelectedActionList(0), Title := "Action to Perform", ListName := "Options")
      Select UserSelectedAction
   Case "DXF & PDF": UserSelectedAction = 3
   Case "PDF Only": UserSelectedAction = 1
   Case "DXF Only":    UserSelectedAction = 2
   End Select
 If userChoice Then
   Call MakePDFFromDoc(ThisApplication.ActiveDocument, myDate, UserSelectedAction)
  Else
   For Each oDoc In ThisApplication.Documents
    If oDoc.DocumentType = kDrawingDocumentObject
     Try
      If Len(oDoc.File.FullFileName)>0 Then
       Call MakePDFFromDoc(oDoc, myDate, UserSelectedAction)
      End If
     Catch
     End Try
    End If
   Next
  End If
 End Sub
 Sub MakePDFFromDoc(ByRef oDocument As Document, DateString As String, UserSelectedAction As Integer)
 ' oPath = oDocument.Path
 ' oFileName = oDocument.FileName(False) 'without extension
  'oDocument = ThisApplication.ActiveDocument
  oPDFAddIn = ThisApplication.ApplicationAddIns.ItemById _
  ("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
  oContext = ThisApplication.TransientObjects.CreateTranslationContext
  oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
  oOptions = ThisApplication.TransientObjects.CreateNameValueMap
  oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
 oFullFileName = oDocument.File.FullFileName
  oPath = Left(oFullFileName, InStrRev(oFullFileName, "\")-1)
  oFileName = Right(oFullFileName, Len(oFullFileName)-InStrRev(oFullFileName, "\"))
  oFilePart = Left(oFileName, InStrRev(oFileName, ".")-1)
 'oRevNum = oDocument.iProperties.Value("Project", "Revision Number")
  'oDocument = ThisApplication.ActiveDocument
 ' If oPDFAddIn.HasSaveCopyAsOptions(oDataMedium, oContext, oOptions) Then
  oOptions.Value("All_Color_AS_Black") = 0
  oOptions.Value("Remove_Line_Weights") = 0
  oOptions.Value("Vector_Resolution") = 400
  oOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintAllSheets
  'oOptions.Value("Custom_Begin_Sheet") = 2
  'oOptions.Value("Custom_End_Sheet") = 4
 ' End If
 'get PDF target folder path
  'oFolder = Left(oPath, InStrRev(oPath, "\")) & "PDF"
  oFolder = oPath & "\iLogic PDF's (" & DateString & ")"
 'Check for the PDF folder and create it if it does not exist
  If Not System.IO.Directory.Exists(oFolder) Then
   System.IO.Directory.CreateDirectory(oFolder)
  End If
 'Set the PDF target file name
  oDataMedium.FileName = oFolder & "\" & oFilePart & ".pdf"
 'Publish document
  If (UserSelectedAction = 1) Or (UserSelectedAction = 3) Then
   oPDFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)'For PDF's
  End If
  If (UserSelectedAction = 2) Or (UserSelectedAction = 3) Then
   oDocument.SaveAs(oFolder & "\" & oFilePart & ".dxf", True) 'For DXF's
  End If
  'oDocument.SaveAs(oFolder & "\" & ThisDoc.ChangeExtension(".dxf"), True) 'For DXF's
  '------end of iLogic-------
 End Sub

8 comments

  • Hey man! I’m from Brazil and just need to thank so much.

  • Good morning ,
    This rule is amazing, is saving me a considerably amount of time.
    Is there any way to modify the code to save only the profile of the part without the whole title block and dimensions?

    Really appreciate your efforts in providing this great code,

    Thanks,

    Eric

  • Hi there, terrific piece of code, very helpful, well done
    Thanks
    Dave

  • Hello, love this Rule.
    However, I’m trying to get the oRevNum to work and have it add this to my filename.

    Removing the comment mark of your line for oRevNum, stops the Rule from working (no error message, but it just won’t execute beyond the inputboxes.

    If I remove the “oDocument” part in front of iProperties, I only get the revision number of the active document on all other saved documents. Hope you can help me here. Many thanks, Walter

  • I do not know who you are but you literally saved my life. Thank you very much.

  • Legendary, thanks for this. I modified it slightly so that it requires me to enter a revision number and only does pdf.

    If this helps anyone else, here’s the ilogic code:

    Sub Main()
    Dim myDate As String = Now().ToString(“yyyy-MM-dd HHmmss”)
    myDate = myDate.Replace(“:”,””) ‘ & ” – ” & TypeString
    userChoice = InputRadioBox(“Defined the scope”, “This Document”, “All Open Documents”, True, Title := “Defined the scope”)
    Revision = InputBox(“Enter Revision”, “Revision Selection”, “0”)
    If userChoice Then
    Call MakePDFFromDoc(ThisApplication.ActiveDocument, myDate, Revision)
    Else
    For Each oDoc In ThisApplication.Documents
    If oDoc.DocumentType = kDrawingDocumentObject
    Try
    If Len(oDoc.File.FullFileName)>0 Then
    Call MakePDFFromDoc(oDoc, myDate, Revision)
    End If
    Catch
    End Try
    End If
    Next
    End If
    End Sub
    Sub MakePDFFromDoc(ByRef oDocument As Document, DateString As String, Revision As String)

    ‘ oPath = oDocument.Path
    ‘ oFileName = oDocument.FileName(False) ‘without extension
    ‘oDocument = ThisApplication.ActiveDocument
    oPDFAddIn = ThisApplication.ApplicationAddIns.ItemById _
    (“{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}”)
    oContext = ThisApplication.TransientObjects.CreateTranslationContext
    oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
    oOptions = ThisApplication.TransientObjects.CreateNameValueMap
    oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
    oFullFileName = oDocument.File.FullFileName
    oPath = Left(oFullFileName, InStrRev(oFullFileName, “\”)-1)
    oFileName = Right(oFullFileName, Len(oFullFileName)-InStrRev(oFullFileName, “\”))
    oFilePart = Left(oFileName, InStrRev(oFileName, “.”)-1)
    ‘oRevNum = oDocument.iProperties.Value(“Project”, “Revision Number”)
    ‘oDocument = ThisApplication.ActiveDocument
    ‘ If oPDFAddIn.HasSaveCopyAsOptions(oDataMedium, oContext, oOptions) Then
    oOptions.Value(“All_Color_AS_Black”) = 1
    oOptions.Value(“Remove_Line_Weights”) = 1
    oOptions.Value(“Vector_Resolution”) = 400
    oOptions.Value(“Sheet_Range”) = Inventor.PrintRangeEnum.kPrintAllSheets
    ‘oOptions.Value(“Custom_Begin_Sheet”) = 2
    ‘oOptions.Value(“Custom_End_Sheet”) = 4
    ‘ End If
    ‘get PDF target folder path
    ‘oFolder = Left(oPath) & “PDF”
    oFolder = oPath
    ‘Check for the PDF folder and create it if it does not exist
    If Not System.IO.Directory.Exists(oFolder) Then
    System.IO.Directory.CreateDirectory(oFolder)
    End If
    ‘Set the PDF target file name
    oDataMedium.FileName = oFolder & “\” & oFilePart & “-REV” & Revision & “.pdf”
    ‘Publish document
    oPDFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)’For PDF’s
    ‘oDocument.SaveAs(oFolder & “\” & ThisDoc.ChangeExtension(“.dxf”), True) ‘For DXF’s
    ‘——end of iLogic——-
    End Sub

  • Hi all,

    This is great, but would anyone be able to adjust it so it separates out the drawing sheets within a single IDW to separate PDF files, instead of one combined PDF?

  • Very usefull i-logic, Thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *