cancel
Showing results for 
Search instead for 
Did you mean: 

Exporting PDF from NX-8.5 drafting by macro or journal

Highlighted

Exporting PDF from NX-8.5 drafting by macro or journal

Creator
Creator

I would like to export NX drawing to PDF format with automated process. Let me know how can this be accomplished by using macro or journal

 

5 REPLIES

Re: Exporting PDF from NX-8.5 drafting by macro or journal

Pioneer
Pioneer

This is an example of VB program that I have copied from nxjournaling site and I edited to fit NX 9. It would also work in NX 8.5:

 

 

 

Option Strict Off
Imports System
Imports System.IO
Imports System.Collections
Imports System.Windows.Forms
Imports System.Windows.Forms.MessageBox
Imports NXOpen
Imports NXOpen.UF
 
Module NXJournal
 
Dim theSession As Session = Session.GetSession()
Dim workPart As Part = theSession.Parts.Work
Dim displayPart As Part = theSession.Parts.Display
 
'**********************************************************
 
Sub Main
 
Dim dwgs As Drawings.DrawingSheetCollection
dwgs = workPart.DrawingSheets
Dim sheet As Drawings.DrawingSheet
Dim i As Integer
Dim pdfFile As String
Dim currentPath As String
Dim currentFile As String
Dim exportFile As String
Dim partUnits As Integer
Dim strOutputFolder As String
Dim strRevision As String
Dim rspFileExists
Dim rspAdvancePrint
 
'determine if we are running under TC or native
Dim IsTcEng As Boolean = False
Dim UFSes As UFSession = UFSession.GetUFSession()
UFSes.UF.IsUgmanagerActive(IsTcEng)
 
partUnits = displayPart.PartUnits
'0 = inch
'1 = metric
 
If IsTcEng Then
   currentFile = workPart.GetStringAttribute("DB_PART_NO")
   strRevision = workPart.GetStringAttribute("DB_PART_REV")
 
Else 'running in native mode
   'currentFile = GetFilePath() & GetFileName() & ".prt"
   currentPath = GetFilePath()
   currentFile = GetFileName()
 
   Try
       strRevision = workPart.GetStringAttribute("REVISION")
       strRevision = Trim(strRevision)
   Catch ex As Exception
       strRevision = ""
   End Try
End If
exportFile = currentFile
 
strOutputFolder = OutputPath()
'if we don't have a valid directory (ie the user pressed 'cancel') exit the journal
If Not Directory.Exists(strOutputFolder) Then
   Exit Sub
End If
strOutputFolder = strOutputFolder & "\"
 
Dim shts As New ArrayList()
For Each sheet in dwgs
shts.Add(sheet.Name)
Next
shts.Sort()
 
i = 0
Dim sht As String
For Each sht in shts
 
   For Each sheet in dwgs
       If sheet.name = sht Then
           i = i + 1
 
           If rspAdvancePrint = vbyes Then
               pdfFile = strOutputFolder & exportFile & "_advance" & ".pdf"
           Else
               If strRevision <> "" Then
                   pdfFile = strOutputFolder & exportFile & "_" & strRevision & ".pdf"
               Else
                   pdfFile = strOutputFolder & exportFile & ".pdf"
               End If
           End If
 
           'the pdf export uses 'append file', if we are on sheet 1 make sure the user wants to overwrite
           'if the drawing is multisheet, don't ask on subsequent sheets
           If i = 1 Then
               If File.Exists(pdfFile) Then
                   rspFileExists = msgbox("The file: '" & pdfFile & "' already exists; overwrite?", vbyesno + vbquestion)
                   If rspFileExists = vbYes Then
                       Try
                           File.Delete(pdfFile)
                       Catch ex As Exception
                           msgbox(ex.message & vbcrlf & "Journal exiting", vbcritical + vbokonly, "Error")
                           Exit Sub
                       End Try
                   Else
                       'msgbox("journal exiting", vbokonly)
                       Exit Sub
                   End If
               End If
           End If
 
           'update any views that are out of date
           theSession.Parts.Work.DraftingViews.UpdateViews(Drawings.DraftingViewCollection.ViewUpdateOption.OutOfDate, sheet)
 
           Try
               ExportPDF(sheet, pdfFile, partUnits, rspAdvancePrint)
           Catch ex As exception
               msgbox("Error occurred in PDF export" & vbcrlf & ex.message & vbcrlf & "journal exiting", vbcritical + vbokonly, "Error")
               Exit Sub
           End Try
           Exit For
       End If
   Next
 
Next
 
   If i = 0 Then
       MessageBox.Show("This part has no drawing sheets to export", "PDF export failure", MessageBoxButtons.ok, MessageBoxIcon.Warning)
   Else
       MessageBox.Show("Exported: " & i & " sheet(s) to pdf file" & vbcrlf & pdfFile, "PDF export success", MessageBoxButtons.ok, MessageBoxIcon.Information)
   End If
 
End Sub
'**********************************************************
 
Function GetFileName()
   Dim strPath As String
   Dim strPart As String
   Dim pos As Integer
 
   'get the full file path
   strPath = displayPart.fullpath
   'get the part file name
   pos = InStrRev(strPath, "\")
   strPart = Mid(strPath, pos + 1)
 
   strPath = Left(strPath, pos)
   'strip off the ".prt" extension
   strPart = Left(strPart, Len(strPart) - 4)
 
   GetFileName = strPart
End Function
'**********************************************************
 
Function GetFilePath()
   Dim strPath As String
   Dim strPart As String
   Dim pos As Integer
 
   'get the full file path
   strPath = displayPart.fullpath
   'get the part file name
   pos = InStrRev(strPath, "\")
   strPart = Mid(strPath, pos + 1)
 
   strPath = Left(strPath, pos)
   'strip off the ".prt" extension
   strPart = Left(strPart, Len(strPart) - 4)
 
   GetFilePath = strPath
End Function
'**********************************************************
 
Function OutputPath()
'Requires:
'    Imports System.IO
'    Imports System.Windows.Forms
'if the user presses OK on the dialog box, the chosen path is returned
'if the user presses cancel on the dialog box, 0 is returned
 
Dim strLastPath As String
Dim strOutputPath As String
 
'Key will show up in HKEY_CURRENT_USER\Software\VB and VBA Program Settings
Try
  'Get the last path used from the registry
  strLastPath = GetSetting("NX journal", "Export pdf", "ExportPath")
  'msgbox("Last Path: " & strLastPath)
  Catch e As ArgumentException
  Catch e As Exception
  msgbox (e.GetType.ToString)
  Finally
End Try
 
Dim FolderBrowserDialog1 As New FolderBrowserDialog
 
' Then use the following code to create the Dialog window
' Change the .SelectedPath property to the default location
With FolderBrowserDialog1
    ' Desktop is the root folder in the dialog.
    .RootFolder = Environment.SpecialFolder.Desktop
    ' Select the D:\home directory on entry.
   If Directory.Exists(strLastPath) Then
       .SelectedPath = strLastPath
   Else
       .SelectedPath = "D:\home"
   End If
    ' Prompt the user with a custom message.
    .Description = "Select the directory to export .pdf file"
    If .ShowDialog = DialogResult.OK Then
       ' Display the selected folder if the user clicked on the OK button.
       OutputPath = .SelectedPath
       ' save the output folder path in the registry for use on next run
       SaveSetting("NX journal", "Export pdf", "ExportPath", .SelectedPath)
   Else
       'user pressed 'cancel', exit the subroutine
       OutputPath = 0
       'exit sub
    End If
End With
 
End Function
'**********************************************************
 
Sub ExportPDF(dwg As Drawings.DrawingSheet, outputFile As String, units As Integer, advancePrint As Integer)
 
   Dim printPDFBuilder1 As PrintPDFBuilder
 
   printPDFBuilder1 = workPart.PlotManager.CreatePrintPdfbuilder()
   printPDFBuilder1.Scale = 1.0
printPDFBuilder1.Widths = PrintPDFBuilder.Width.CustomThreeWidths
   printPDFBuilder1.Action = PrintPDFBuilder.ActionOption.Native
   printPDFBuilder1.Colors = PrintPDFBuilder.Color.BlackOnWhite
Dim widthDefinition1 As WidthDefinition
widthDefinition1 = printPDFBuilder1.CreateWidthDefinition()

widthDefinition1.Use = 1

widthDefinition1.Single = 0

widthDefinition1.SingleWidth = 0.25

widthDefinition1.SingleSource = 0
Dim customwidths1() As CustomWidth
customwidths1 = widthDefinition1.GetCustomWidths()

customwidths1(0).Width = 0.5

customwidths1(0).Name = "PDF Custom Normal"

customwidths1(1).Width = 0.25

customwidths1(1).Name = "PDF Custom Thick"

customwidths1(2).Width = 0.18

customwidths1(2).Name = "PDF Custom Thin"

customwidths1(3).Width = 0.0

customwidths1(3).Name = "NOT USED"

customwidths1(4).Width = 0.0

customwidths1(4).Name = "NOT USED"

customwidths1(5).Width = 0.18

customwidths1(5).Name = "PDF Custom Width 1"

customwidths1(6).Width = 0.5

customwidths1(6).Name = "PDF Custom Width 2"

customwidths1(7).Width = 0.25

customwidths1(7).Name = "PDF Custom Width 3"

customwidths1(8).Width = 0.35

customwidths1(8).Name = "PDF Custom Width 4"

customwidths1(9).Width = 0.5

customwidths1(9).Name = "PDF Custom Width 5"

customwidths1(10).Width = 0.7

customwidths1(10).Name = "PDF Custom Width 6"

customwidths1(11).Width = 1.0

customwidths1(11).Name = "PDF Custom Width 7"

customwidths1(12).Width = 1.4

customwidths1(12).Name = "PDF Custom Width 8"

customwidths1(13).Width = 2.0

customwidths1(13).Name = "PDF Custom Width 9"



   printPDFBuilder1.Size = PrintPDFBuilder.SizeOption.ScaleFactor
   If units = 0 Then
       printPDFBuilder1.Units = PrintPDFBuilder.UnitsOption.English
   Else
       printPDFBuilder1.Units = PrintPDFBuilder.UnitsOption.Metric
   End If
   printPDFBuilder1.XDimension = dwg.height
   printPDFBuilder1.YDimension = dwg.length
   printPDFBuilder1.OutputText = PrintPDFBuilder.OutputTextOption.Text
   printPDFBuilder1.RasterImages = True
   printPDFBuilder1.ImageResolution = PrintPDFBuilder.ImageResolutionOption.High
   printPDFBuilder1.Append = True
   
 
   Dim sheets1(0) As NXObject
   Dim drawingSheet1 As Drawings.DrawingSheet = CType(dwg, Drawings.DrawingSheet)
 
   sheets1(0) = drawingSheet1
   printPDFBuilder1.SourceBuilder.SetSheets(sheets1)
 
   printPDFBuilder1.Filename = outputFile
 
   Dim nXObject1 As NXObject
   nXObject1 = printPDFBuilder1.Commit()
 
   printPDFBuilder1.Destroy()
 
End Sub
'**********************************************************
 
End Module

 

 

 

 

Sina shojaee

Re: Exporting PDF from NX-8.5 drafting by macro or journal

Creator
Creator

Thanks for Journel

I have created Journal as per your script. However getting error while running journel I have attached error message

 

Re: Exporting PDF from NX-8.5 drafting by macro or journal

Pioneer
Pioneer

I checked the code and it works in NX 8.5. Line 112 is for updating views before exporting to PDF.

You can completely ommit line 112:

theSession.Parts.Work.DraftingViews.UpdateViews(Drawings.DraftingViewCollection.ViewUpdateOption.OutOfDate, sheet)

 

Maybe you didnt copy completely line 112 or you put unexpected " ' " somewhere in this line.

Sina shojaee

Re: Exporting PDF from NX-8.5 drafting by macro or journal

Creator
Creator

Thanks That works pretty well

Re: Exporting PDF from NX-8.5 drafting by macro or journal

Creator
Creator

Hi Sina,

 

I want to export PDF to the specific folder instead of desktop with desired settings I attached settings. Let me know how to include these settings in journel