Sharing engineering drawings is important, using a format the recipient can open is vital. This program is designed to take a drawing and automate it into a .pdf file using NX Journal.
Journal Capabilities:
- Journal automates the drawing to a .pdf file.
- The journal will automatically iterate through all the sheets in a drawing and convert them into a multi-page single .pdf file.
- The new file will be output as the form [partname].pdf.
- The journal has the ability to browse for the output folder rather than exporting to same folder as original file.
Journal Requirements:
- Assumes Journal is starting in the drafting application.
NX Journal: Converting a Drawing into a .pdf File
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 & "\"
rspAdvancePrint = MessageBox.Show("Add advance print watermark?", "Add Watermark?", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
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.Action = PrintPDFBuilder.ActionOption.Native
printPDFBuilder1.Colors = PrintPDFBuilder.Color.BlackOnWhite
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.Polylines
printPDFBuilder1.RasterImages = True
printPDFBuilder1.ImageResolution = PrintPDFBuilder.ImageResolutionOption.Medium
printPDFBuilder1.Append = True
If advancePrint = vbyes Then
printPDFBuilder1.AddWatermark = True
printPDFBuilder1.Watermark = "ADVANCE PRINT NOT TO BE USED FOR PRODUCTION " & Today
Else
printPDFBuilder1.AddWatermark = False
printPDFBuilder1.Watermark = ""
End If
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
Comments
Exporting Drawings for entire assembly
I have modified your change attibute assembly journal with great success. I now would like to use that again only this time instead of walking though and modifying an attribute, I would like it to create any drawings that exist.
The roadblock I'm at is as follows: I am struggling with how to make your recursion actually change the work AND displayed part to effectively access the drawings.
What would be the code to actually make a child component become the work part?
Using the journal recorder and modifying it has only helped me get so far.
process assembly
nes386,
I sent an email to the address you supplied. It contains code to walk through an assembly and set each part as the display part in turn.
Let me know how it goes!
process assembly
Hi,
can you please send the code for me also?
Stay Hungry
Stay Foolish
process assembly
I'll take that code as well if it's available.
Thanks,
Singsonite
process assembly
Hi!
It would be great to have this code :)
Would you please be so kind to send it to my email-address?
Thanks a lot!
re: process assembly
Below is the code referenced in a previous post. I'd like to point out that it isn't necessary to change the display part to output the drawing sheets to a pdf file.
'Journal to recursively walk through the assembly structure
' will run on assemblies or piece parts
' will step through all components of the displayed part
'NX 7.5, native
'NXJournaling.com February 24, 2012
Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.Assemblies
Module NXJournal
Public theSession As Session = Session.GetSession()
Dim workPart As Part = theSession.Parts.Work
Dim displayPart As Part = theSession.Parts.Display
Dim startWorkPart As Part = theSession.Parts.Work
Dim startDispPart As Part = theSession.Parts.Display
Public ufs As UFSession = UFSession.GetUFSession()
Public lw As ListingWindow = theSession.ListingWindow
Sub Main()
Dim startWorkPart As Part = theSession.Parts.Work
Dim startDispPart As Part = theSession.Parts.Display
lw.Open()
Try
Dim c As ComponentAssembly = displayPart.ComponentAssembly
'to process the work part rather than the display part,
' comment the previous line and uncomment the following line
'Dim c As ComponentAssembly = workPart.ComponentAssembly
If Not IsNothing(c.RootComponent) Then
'*** insert code to process 'root component' (assembly file)
lw.WriteLine("Assembly: " & c.RootComponent.DisplayName)
lw.WriteLine(" + Active Arrangement: " & c.ActiveArrangement.Name)
'*** end of code to process root component
ReportComponentChildren(c.RootComponent, 0)
Else
'*** insert code to process piece part
lw.WriteLine("Part has no components")
End If
Catch e As Exception
theSession.ListingWindow.WriteLine("Failed: " & e.ToString)
End Try
lw.Close()
End Sub
'**********************************************************
Sub reportComponentChildren(ByVal comp As Component, _
ByVal indent As Integer)
'change displayed part to comp
ChangeDisplayPart(comp)
MsgBox("Displayed part is now: " & comp.Prototype.OwningPart.FullPath)
'add code to process displayed part
'
'
'change display part back to the display part when journal started
ChangeDisplayPart(startDispPart)
For Each child As Component In comp.GetChildren()
'*** insert code to process component or subassembly
lw.WriteLine(New String(" ", indent * 2) & child.DisplayName())
'*** end of code to process component or subassembly
If child.GetChildren.Length <> 0 Then
'*** this is a subassembly, add code specific to subassemblies
lw.WriteLine(New String(" ", indent * 2) & _
"* subassembly with " & _
child.GetChildren.Length & " components")
lw.WriteLine(New String(" ", indent * 2) & _
" + Active Arrangement: " & _
child.OwningPart.ComponentAssembly.ActiveArrangement.Name)
'*** end of code to process subassembly
Else
'this component has no children (it is a leaf node)
'add any code specific to bottom level components
End If
reportComponentChildren(child, indent + 1)
Next
End Sub
Public Sub ChangeDisplayPart(ByVal comp As Component)
'make the given component the display part
Dim markId1 As Session.UndoMarkId
markId1 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Display Part")
Dim compPart As Part = comp.Prototype.OwningPart
Try
Dim partLoadStatus1 As PartLoadStatus
Dim status1 As PartCollection.SdpsStatus
status1 = theSession.Parts.SetDisplay(compPart, False, False, partLoadStatus1)
workPart = theSession.Parts.Work
displayPart = theSession.Parts.Display
partLoadStatus1.Dispose()
Catch ex As Exception
lw.WriteLine("error opening part: " & compPart.FullPath)
lw.WriteLine(ex.Message)
theSession.UndoToMark(markId1, "Display Part")
Finally
theSession.DeleteUndoMark(markId1, "Display Part")
End Try
End Sub
Public Sub ChangeDisplayPart(ByVal myPart As Part)
'make the given component the display part
Dim markId1 As Session.UndoMarkId
markId1 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, "Display Part")
Try
Dim partLoadStatus1 As PartLoadStatus
Dim status1 As PartCollection.SdpsStatus
status1 = theSession.Parts.SetDisplay(myPart, False, False, partLoadStatus1)
workPart = theSession.Parts.Work
displayPart = theSession.Parts.Display
partLoadStatus1.Dispose()
Catch ex As Exception
lw.WriteLine("error opening part: " & myPart.FullPath)
lw.WriteLine(ex.Message)
theSession.UndoToMark(markId1, "Display Part")
Finally
theSession.DeleteUndoMark(markId1, "Display Part")
End Try
End Sub
'**********************************************************
Public Function GetUnloadOption(ByVal dummy As String) As Integer
Return Session.LibraryUnloadOption.Immediately
End Function
'**********************************************************
End Module
Excelent
We needed the really same program: to be able to to create a pdf walking through every sheets of a drawing.
That works great. Many thanks for your work !
NOt Created PDf
Hello,
this Journal is working fine without any giving error in TC
in native it is create PDF excellent, but in TC it will not create PDF
just export file outside to giving path.
not create PDF it just a file without bytes, what its done only giving name of file
please solve this problem
I am using NX 8.5 with TC 10
export pdf's of all parts in the given folder
Hi I tried to use export_pdf_from_folder.vb
but I get the error "Part Scan Error: File already exists"
Can you help me understand why I get the error. A fix would be even better.
re: export pdf files from folder
If the journal finds an existing pdf in the output directory, it will attempt to delete it before exporting the current drawing to pdf. That error message is likely to occur if the attempt to delete the file is unsuccessful. A pdf file may not be able to be deleted if you do not have proper permissions on the file and/or folder that contains it. Also, if the file is currently being used by another process, the OS may not allow you to delete it. If the file is currently open, you may run into this situation. Bear in mind that if the files are saved on a network location, any user with the proper permissions may have the file open.
re: export pdf files from folder
Thanks so much for the site and look at this.
I have full access to the folders. I tried add a counter and say counter01 = counter01 + 1
And then _outputPdfFile = _outputPdfFile & Count001 & ".pdf" so each pdf would have a unique name.
But I have trouble dim the counter01. I'm not very good with Public Property and Private funtions
re: export pdf files from folder
Are we talking about the example code that comes in the pdf exporter zip file?
If not, please post the code that you are using or provide a link to it.
Export PDF to Tc
Hi
It's possible to have this Journal for NX9/NX10 & Tc10.1? Thanks in advanced.
re: export PDF to TC
The code referenced above has an option to export a PDF to TC, but it does not work as well as I would like. It will not update/overwrite an existing PDF in the dataset.
The code should work for NX 9 and 10. Did you encounter an error when running the code?
i created a new empty macro
i created a new empty macro and copied the whole journal after the header into it. Nothing happend. Either in managed or nativ environment. I suppose my way doing is wrong?
ups, i'm sorry. Ill try to do
ups, i'm sorry. Ill try to do an journal not an macro! Sorry for that mistake!
i tried it out. It works well
i tried it out. It works well in the native mode. It also overwrite an existing pdf. If i run the journal in a managed environment nx9 & tc10.1 it ask always for the save location.
re: export pdf
Yes, I'm happy with how it works with native NX. My previous comments were about TC only. It prompts for a save location because the code you ran exports the PDF to the file system. The option for exporting to a dataset has been disabled until I can do further testing.
Export PDF to Teamcenter
Any progress on getting this to export a PDF dataset to the item revision in Teamcenter? I'm trying to develop a one-click solution to export a PDF dataset of all drawing sheets and replacing any existing dataset. Right now I'm attempting to combine the sheet loop you used in this journal with the journal recorded when using the File, Export, PDF command in NX.
re: export PDF to TC
I now have access to TC, but I'm up to my eyeballs in data migration and trouble shooting. I don't know when/if I'll be able to get back to this journal code; please keep us updated on any progress that you make.
Export Just Active Sheet
Instead of it finding each sheet contained in a file, how would I set it up to do just the active sheet?
re: output active sheet
The following line starts the loop to process all the sheets in the drawing:
For Each sheet in dwgs
You will need to remove the loop and instead only process the active sheet.
Syntax
What's the syntax for calling the active sheet? Ctype is always what the journal creates and that's not going to work.
re: current drawing sheet
{part reference}.DrawingSheets.CurrentDrawingSheet
Re:Exporting Drawings to .pdf Files Using NX Journal
Hi,
Its working very well for individual drawings,
but how to make it to run through all open drawings. and export them to selected location.
??????
-[]-
re: export pdf
http://nxjournaling.com/content/pdf-exporter-class
If you look at the "usage examples" section of the article, you will find a link to download the code. I'd suggest starting with the "export_pdf_test_min.vb" journal and looking to see how "Sub Main" exports a pdf based on the work part (it's only about 10 lines of code). Don't worry about the class code, you won't need to change it or even understand how it works; focus on Sub Main and study how it creates an "NXJ_PdfExporter" object and uses it to create the pdf.
Once you understand that, modify Sub Main to iterate through the open prt files in theSession.Parts, creating a pdf from each.
re: export pdf
Hi,
Thanks for link.... Tried to edit but no luck.....:(
-[]-
re: export pdf
Please post what you have tried and we'll go from there.
re: export pdf
I'm Not getting how to add loaded parts to edit......so I have Zero to post
-[]-
re: pdf all parts in session
Below is one way to do it.
Note: to run this as a journal, you will need to combine the code below with the class code from the PDF exporter article.
Option Strict Off
Imports System
Imports System.IO
Imports System.Collections.Generic
Imports System.Windows.Forms
Imports NXOpen
Imports NXOpen.UF
Module All_parts_in_session
Sub Main()
Dim theSession As Session = Session.GetSession
If IsNothing(theSession.Parts.Display) Then
MessageBox.Show("Active Part Required", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return
End If
Dim workPart As Part = theSession.Parts.Work
Dim displayPart As Part = theSession.Parts.Display
For Each tempPart As Part In theSession.Parts
Dim partLoadStatus1 As PartLoadStatus
Dim status1 As PartCollection.SdpsStatus
status1 = theSession.Parts.SetDisplay(tempPart, False, False, partLoadStatus1)
workPart = theSession.Parts.Work
displayPart = theSession.Parts.Display
partLoadStatus1.Dispose()
Dim myPdfExporter As New NXJ_PdfExporter
myPdfExporter.Part = displayPart
'$ show confirmation dialog box on completion
myPdfExporter.ShowConfirmationDialog = True
Try
myPdfExporter.Commit()
Catch ex As Exception
MessageBox.Show("Error:" & ControlChars.CrLf & ex.GetType.ToString & " : " & ex.Message, "PDF export error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
myPdfExporter = Nothing
End Try
Next
End Sub
End Module
re: pdf all parts in session
ohhh......there is a small problem,
I had a weldment assembly consisting 46 parts,
and some other 6 parts loaded in session,
but only 7 (1 asm+6 parts) drawings open in window,
when tried to test given code.....its running through all the loaded parts,
I mean 46+6.....which took a long time to complete......is it possible to make it run only for open files instead of loaded files???
-[]-
re: pdf export
An open file is a loaded file.
Re: Pdf Export
I guess there might be a difference.....
Let's take example of an assembly
If I opened an assembly consisting X number of Components
Assembly I'll be considered as opened part, and remaining all X number of components might be loaded. even window menu also shows only opened parts unless you go to more option....
If I'm wrong please suggest.....
-[]-
re: pdf export
It appears that NX keeps track of "explicitly opened" vs. "implicitly opened" parts. However, either the function to differentiate between the two has not been made available in the API, or I simply overlooked it.
If you find it, please let us know.
It makes sense now......Thank
It makes sense now......Thank you....
Sure I'll post as soon I get the solution....
-[]-
Hi
Hi
Can i have one code that runs through the complete assembly and export all the drawings available as pdf/tiff file.
Please mail me @ s.dinesh134@gmail.com
PDF Export to TC
It ended up being a lot simpler than I thought. The key is to set the sheets to export as an array of all sheets using this line:
printPDFBuilder1.SourceBuilder.SetSheets(workpart.DrawingSheets.ToArray)
Imports System
Imports NXOpen
Module NXJournal
Sub Main (ByVal args() As String)
Dim theSession As NXOpen.Session = NXOpen.Session.GetSession()
Dim workPart As NXOpen.Part = theSession.Parts.Work
Dim displayPart As NXOpen.Part = theSession.Parts.Display
Dim printPDFBuilder1 As NXOpen.PrintPDFBuilder = Nothing
printPDFBuilder1 = workPart.PlotManager.CreatePrintPdfbuilder()
'Get part number attribute (drawing must be work part)
Dim partnumber = workPart.GetUserAttribute("DB_PART_NO", NXObject.AttributeType.String, -1)
Dim partnumberstring = partnumber.StringValue
'Parameters
printPDFBuilder1.Relation = NXOpen.PrintPDFBuilder.RelationOption.Manifestation
printPDFBuilder1.DatasetType = "PDF"
printPDFBuilder1.NamedReferenceType = "PDF_Reference"
printPDFBuilder1.Scale = 1.0
printPDFBuilder1.Colors = NXOpen.PrintPDFBuilder.Color.BlackOnWhite
printPDFBuilder1.Size = NXOpen.PrintPDFBuilder.SizeOption.ScaleFactor
printPDFBuilder1.Units = NXOpen.PrintPDFBuilder.UnitsOption.English
printPDFBuilder1.RasterImages = True
printPDFBuilder1.ImageResolution = NXOpen.PrintPDFBuilder.ImageResolutionOption.Medium
printPDFBuilder1.Assign()
'Set sheets to an array of all drawing sheets
printPDFBuilder1.SourceBuilder.SetSheets(workpart.DrawingSheets.ToArray)
'Get part number attribute (drawing must be work part) and set as string
Dim partnumber = workPart.GetUserAttribute("DB_PART_NO", NXObject.AttributeType.String, -1)
Dim partnumberstring = partnumber.StringValue
'Assign Dataset name as part number
printPDFBuilder1.DatasetName = partnumberstring
Dim nXObject1 As NXOpen.NXObject = Nothing
nXObject1 = printPDFBuilder1.Commit()
printPDFBuilder1.Destroy()
End Sub
End Module
Oops
Sorry, meant to post this as a reply to the relevant comment above...
PDF Export to TC
Is it possible to add sorting by sheet name/number to this?
re: pdf export, sort by sheet
I put together a more robust PDF export journal a while ago, it allows sorting by the sheet name. It can be found here:
http://nxjournaling.com/content/pdf-exporter-class
Export to pdf
Hello Experts
My requirement is
step 1: User will run the macro
step 2: macro will browse the folder which contains the dwg files & user will
select the folder.
step 3: macro will convert the all dwg files into PDF files save in same
folder.
Please support on above requirement
Thank you
Reagrds
Naveen
re: export PDF
PDF Exporter Class
The link above will download a zip file with a few PDF export journals. One is called "export_pdf_test_all_parts_in_folder.vb", it will export pdf's for all parts in the specified folder. It may do exactly what you want; if not, it should serve as a good starting point.
Color and Width paletes
Hello,
is there a way, how to set color and width palette to be used while esporting Pdf files with this journal? Thank you.
re: export color and width
The first journal outputs a black & white pdf with (I believe) the standard line widths. Other options are available in the builder, you will need to edit the code for your use case.
Export JPG
Hello,
This journal worked perfectly for me to export PDF, but I would like to export jpeg too, could someone help me?
Thank you
re: export jpg
I have code (below) that exports a bmp file of the graphics area. You can change the ".ImageFormat" property to .Jpg to export a jpeg.
If you are looking to export the drawing sheet to jpeg format, you might want to use the plot functionality rather than exporting the current display (it might give better results).
Option Strict Off
Imports System
Imports NXOpen
Module Module1
Sub Main()
Dim theSession As Session = Session.GetSession()
If IsNothing(theSession.Parts.Work) Then
'active part required
Return
End If
Dim workPart As Part = theSession.Parts.Work
Dim lw As ListingWindow = theSession.ListingWindow
lw.Open()
Const undoMarkName As String = "NXJ journal"
Dim markId1 As Session.UndoMarkId
markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, undoMarkName)
Dim tlc() As Integer
Dim brc() As Integer
Dim myImageCapture As Gateway.ImageCaptureBuilder = workPart.ImageCaptureManager.CreateImageCaptureBuilder
With myImageCapture
.CaptureMethod = Gateway.ImageCaptureBuilder.CaptureMethodType.GraphicsArea
.Format = Gateway.ImageCaptureBuilder.ImageFormat.Bmp
.Size = Gateway.ImageCaptureBuilder.ImageSize.Pixels64
'.GetRegion(tlc, brc)
.File = "C:\temp\img_capture.bmp"
lw.WriteLine("file: " & .File)
'.ImageFile = "C:\temp\img_capture.png"
Try
lw.WriteLine("valid: " & .Validate.ToString)
Catch ex As NXException
lw.WriteLine(ex.Message)
End Try
.Commit()
.Destroy()
End With
'lw.WriteLine("top left corner: " & tlc(0) & ", " & tlc(1))
'lw.WriteLine("bottom right corner: " & brc(0) & ", " & brc(1))
Try
' TODO: Add your application code here
Catch ex As NXException
theSession.UndoToMark(markId1, undoMarkName)
MsgBox(ex.Message)
Finally
End Try
lw.Close()
End Sub
Public Function GetUnloadOption(ByVal dummy As String) As Integer
'Unloads the image when the NX session terminates
'GetUnloadOption = NXOpen.Session.LibraryUnloadOption.AtTermination
'----Other unload options-------
'Unloads the image immediately after execution within NX
GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately
'Unloads the image explicitly, via an unload dialog
'GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Explicitly
'-------------------------------
End Function
End Module
Re: Export Jpg
I started running the journal, but inform me that the name is invalid.
could you add in the PDF journal to export jpg for me too?
I am now starting to interpret journals and I don't know how to do this correctly.
Thanks!
re: export jpg
The code posted previously is just to illustrate how to export an image of the graphics area. It uses a hard coded output file path that you will need to change (or provide a way to specify the output file) before running the code. In the code above, change the following line to something more suitable for your needs:
.File = "C:\temp\img_capture.bmp"
Unfortunately, my schedule has recently filled up and not left me much time for journal programming.
I don't think it's possible,
I don't think it's possible, I was looking for this as well. It's a limitation of NX. The journal cannot do more than NX is capable. When you have the PDF export window you will see that there's no Image of JPEG option, only asks for Text if it's polyline or text. I will let you know if I figure this out.
Right now I just export with Plot image and transform that in PDF.