public bool Associate(string printScpIP,int printScpPort,string calledTitle,string callingTitle,DicomPrintScuPrintManagementClassFlags supportedClasses)
Public Overloads Function Associate( _ByVal printScpIP As String, _ByVal printScpPort As Integer, _ByVal calledTitle As String, _ByVal callingTitle As String, _ByVal supportedClasses As DicomPrintScuPrintManagementClassFlags _) As Boolean
public:bool Associate(String^ printScpIP,int printScpPort,String^ calledTitle,String^ callingTitle,DicomPrintScuPrintManagementClassFlags supportedClasses)
printScpIP
The IP address or DNS name of the Print SCP.
printScpPort
Port number of the Print SCP.
calledTitle
The Called AE Title (AE Title of the Print SCP).
callingTitle
The Calling AE Title (AE Title of the Print SCU).
supportedClasses
The SOP/Meta SOP Classes supported by the Print SCU. If none of the Meta SOP Classes is specified, the Basic Grayscale Print Management Meta SOP Class will be specified automatically.
true if the Association was established successfully; false if the Association request was rejected by the Print SCP.
The Association must be established successfully before any of the print management operations can be performed. This method will first try to connect to the Print SCP. If successful, it will then try to establish the Association. This method will not return until the Association is accepted/rejected by the Print SCP, or an error occurs.
The method GetAssociateRejectInformation can be used to get information about the Association rejection in case the Association request was rejected by the Print SCP.
The supportedClasses parameter specifies those SOP/Meta SOP Classes that are supported by the Print SCU itself. Once the Association is established, the method IsClassSupported can be used to test whether a particular SOP/Meta SOP Class is supported on the Association (and hence by the Print SCP).
The established Association can be released using the method Release. It can also be aborted using the method Abort.
using Leadtools;using Leadtools.Dicom;public class MyDicomPrintSCU : DicomPrintScu{public MyDicomPrintSCU(string path) : base(path) { }public override void OnStatus(DicomPrintScuStatus status, DicomCommandStatusType operationStatus){string statusCodeType = "Unknown";StringBuilder msg = new StringBuilder();switch (status){case DicomPrintScuStatus.ReceiveAbort:DicomPrintScuAbortInformation printSCUAbortInfo = GetAbortInformation();msg.AppendFormat("Source = {0}, Reason = {1}", printSCUAbortInfo.Source, printSCUAbortInfo.Reason);Console.WriteLine("Print SCP Aborted the Association: " + msg.ToString());break;case DicomPrintScuStatus.ReceivePrintFilmSessionRsp:DicomCommandStatusType commandStatusType = GetLastOperationStatus();if (operationStatus == DicomCommandStatusType.Success){if (commandStatusType == DicomCommandStatusType.Success){statusCodeType = "Success";}else{statusCodeType = "Warning";}}else{statusCodeType = "Failure";}msg.AppendFormat("Status: 0x{0:X4} {1}", commandStatusType, statusCodeType);Console.WriteLine($"Received N-ACTION-RSP (Basic Film Session SOP Class): {msg.ToString()}");break;}}public override void OnPrinterReport(int eventTypeID, DicomPrinterReportInformation reportInfo){StringBuilder msg = new StringBuilder();string eventTypeName = "Normal";switch (eventTypeID){case 2:eventTypeName = "Warning";break;case 3:eventTypeName = "Failure";break;}msg.AppendFormat("Event Type Name: {0}", eventTypeName);if (eventTypeID != 1 && reportInfo != null){if (reportInfo.PrinterStatusInfo != null){msg.AppendFormat("{0}Printer Status Info: {1}", Environment.NewLine, reportInfo.PrinterStatusInfo);}if (reportInfo.FilmDestination != null){msg.AppendFormat("{0}Film Destination: {1}", Environment.NewLine, reportInfo.FilmDestination);}if (reportInfo.PrinterName != null){msg.AppendFormat("{0}Printer Name: {1}", Environment.NewLine, reportInfo.PrinterName);}}Console.WriteLine($"Printer Status Report: {msg.ToString()}");}public override void OnPrintJobReport(string printJobInstanceUID, int eventTypeID, DicomPrintJobReportInformation reportInfo){StringBuilder msg = new StringBuilder();msg.AppendFormat("Print Job SOP Instance UID: {0}", printJobInstanceUID);string eventTypeName = "Pending";switch (eventTypeID){case 2:eventTypeName = "Printing";break;case 3:eventTypeName = "Done";break;case 4:eventTypeName = "Failure";break;}msg.AppendFormat("{0}Event Type Name: {1}", Environment.NewLine, eventTypeName);if (reportInfo != null){if (reportInfo.ExecutionStatusInfo != null){msg.AppendFormat("{0}Execution Status Info: {1}", Environment.NewLine, reportInfo.ExecutionStatusInfo);}if (reportInfo.FilmSessionLabel != null){msg.AppendFormat("{0}Film Session Label: {1}", Environment.NewLine, reportInfo.FilmSessionLabel);}if (reportInfo.PrinterName != null){msg.AppendFormat("{0}Printer Name: {1}", Environment.NewLine, reportInfo.PrinterName);}}Console.WriteLine($"Print Job Status Report: {msg.ToString()}");}};void PerformBasicPM(){//It's assumed that support for medical communication is already unlocked//Make sure to initialize the DICOM engine, this needs to be done only once//In the whole applicationDicomEngine.Startup();//Make sure to initialize the DICOM Communication engine, this needs to be done only once//In the whole applicationDicomNet.Startup();//The DicomPrintSCU is disposable, this is why we are using the "using" keywordusing (MyDicomPrintSCU printSCU = new MyDicomPrintSCU(null)){printSCU.SetTimeout(60);try{// Establish the Associationbool ret = printSCU.Associate("10.1.1.209", 7104, "PrintSCP", "PrintSCU",DicomPrintScuPrintManagementClassFlags.BasicGrayscalePmMetaSopClass |DicomPrintScuPrintManagementClassFlags.BasicColorPmMetaSopClass |DicomPrintScuPrintManagementClassFlags.BasicAnnotationBoxSopClass |DicomPrintScuPrintManagementClassFlags.BasicPrintImageOverlayBoxSopClass |DicomPrintScuPrintManagementClassFlags.PresentationLutSopClass |DicomPrintScuPrintManagementClassFlags.PrintJobSopClass |DicomPrintScuPrintManagementClassFlags.PrinterConfigurationRetrievalSopClass);//The method will return false if the association was rejected,//if some other error occurred then an exception will be thrownif (ret == false){DicomPrintScuAssociateRejectInformation associateRejectInfo = printSCU.GetAssociateRejectInformation();if (associateRejectInfo != null){StringBuilder msg = new StringBuilder();msg.AppendFormat("Source = {0}, Reason = {1}", associateRejectInfo.Source, associateRejectInfo.Reason);Console.WriteLine(msg.ToString());return;}}// Display some printer infoGetPrinterInfo(printSCU);// Display some printer configuration infoGetPrinterConfigInfo(printSCU);// Create a Film SessionDicomFilmSessionParameters filmSessionParameters = printSCU.GetDefaultFilmSessionParameters();filmSessionParameters.NumberOfCopies = 1;//Over here we can set some other film session parameters before creating the film session.//To set these parameters we can access one or more of these properties://DicomFilmSessionParameters.NumberOfCopies//DicomFilmSessionParameters.MemoryAllocation//DicomFilmSessionParameters.OwnerID//DicomFilmSessionParameters.PrintPriority//DicomFilmSessionParameters.MediumType//DicomFilmSessionParameters.FilmDestination//DicomFilmSessionParameters.FilmSessionLabelprintSCU.CreateFilmSession(filmSessionParameters, true);Console.WriteLine($"Film Session SOP Instance UID: {printSCU.GetFilmSessionInstanceUid()}");// Update the Film Session to specify a "MED" Print PriorityfilmSessionParameters = printSCU.GetDefaultFilmSessionParameters();filmSessionParameters.PrintPriority = "MED";printSCU.UpdateFilmSession(filmSessionParameters);DicomFilmBoxParameters filmBoxParameters = printSCU.GetDefaultFilmBoxParameters();if (printSCU.IsClassSupported(DicomPrintScuPrintManagementClassFlags.BasicAnnotationBoxSopClass)){filmBoxParameters.AnnotationDisplayFormatID = "SomeID";}//Over here we can set some other film box parameters before creating the film box.//To set these parameters we can access one or more of these properties://DicomFilmBoxParameters.ImageDisplayFormat//DicomFilmBoxParameters.FilmOrientation//DicomFilmBoxParameters.FilmSizeID//DicomFilmBoxParameters.ConfigurationInformation//DicomFilmBoxParameters.AnnotationDisplayFormatID//DicomFilmBoxParameters.SmoothingType//DicomFilmBoxParameters.BorderDensity//DicomFilmBoxParameters.EmptyImageDensity//DicomFilmBoxParameters.Trim//DicomFilmBoxParameters.RequestedResolutionID//DicomFilmBoxParameters.MaxDensity//DicomFilmBoxParameters.MinDensity//DicomFilmBoxParameters.Illumination//DicomFilmBoxParameters.ReflectedAmbientLight//DicomFilmBoxParameters.MagnificationType// Create a Film BoxprintSCU.CreateFilmBox(filmBoxParameters, null);Console.WriteLine($"Film Box SOP Instance UID: {printSCU.GetFilmBoxInstanceUid()}");// Create a Presentation LUTif (printSCU.IsClassSupported(DicomPrintScuPrintManagementClassFlags.PresentationLutSopClass)){// Make sure that you have a valid presentation state dataset,// otherwise leave this code commented out/*using (DicomDataSet presentationLUTDataset = new DicomDataSet()){//Load DICOM FilepresentationLUTDataset.Load(LeadtoolsExamples.Common.ImagesPath.Path + "plut_Pre.dcm", DicomDataSetLoadFlags.None);printSCU.CreatePresentationLUT(presentationLUTDataset, null);string presLUTInstanceUID = printSCU.GetPresentationLutInstanceUid();if(presLUTInstanceUID != null){Console.WriteLine($"Pres LUT SOP Instance UID: {presLUTInstanceUID}");printSCU.UpdateFilmBox(null, presLUTInstanceUID);}}*/}using (DicomDataSet imageDataset = new DicomDataSet()){//Load DICOM FileimageDataset.Load(Path.Combine(LEAD_VARS.ImagesDir, "IMAGE3.dcm"), DicomDataSetLoadFlags.LoadAndClose);// Update the Image Box. Since the Image Display Format of the Film Box was// set to "STANDARD\1,1", then we are supposed to have one Image Box created// by the Print SCP.if (printSCU.GetImageBoxesCount() > 0){Console.WriteLine($"Image Box SOP Instance UID: {printSCU.GetImageBoxInstanceUid(0)}");DicomImageBoxParameters imageBoxParameters = printSCU.GetDefaultImageBoxParameters();imageBoxParameters.ImagePosition = 1;//Over here we can set some other image box parameters before updating the image box.//To set these parameters we can access one or more of these properties://DicomImageBoxParameters.MinDensity//DicomImageBoxParameters.MaxDensity//DicomImageBoxParameters.RequestedImageSize//DicomImageBoxParameters.Polarity//DicomImageBoxParameters.MagnificationType//DicomImageBoxParameters.SmoothingType//DicomImageBoxParameters.ConfigurationInformation//DicomImageBoxParameters.RequestedDecimateCropBehaviorprintSCU.UpdateImageBox(printSCU.GetImageBoxInstanceUid(0),imageDataset,0,imageBoxParameters,null,null);// We don't need them any moreprintSCU.FreeImageBoxesInstanceUids();}}// Update the Annotation Boxes (if there are any)int annotationBoxCount = printSCU.GetAnnotationBoxesCount();for (int i = 0; i < annotationBoxCount; i++){printSCU.UpdateAnnotationBox(printSCU.GetAnnotationBoxInstanceUid(i), i + 1, "Some Text");}printSCU.FreeAnnotationBoxesInstanceUids(); // We don't need them any more// Print the Film Session (or the Film Box; there is no difference since we// have a single Film Box in the Film Session)printSCU.PrintFilmSession();// We can also call this//PrintSCU.PrintFilmBox();// Display some info about the Print Jobif (printSCU.IsClassSupported(DicomPrintScuPrintManagementClassFlags.PrintJobSopClass)){GetPrintJobInfo(printSCU, printSCU.GetPrintJobInstanceUid());}// Delete the Film Box (anyway, it would be deleted when the Film Session// is deleted)printSCU.DeleteFilmBox();// Delete the Film SessionprintSCU.DeleteFilmSession();// We can also call printSCU.DeletePresentationLUT and printSCU.DeleteOverlayBox// to Delete the Presentation LUT and the Image Overlay Box}catch (DicomException ex){Console.WriteLine(string.Format("An error occurred, code: {0}", ex.Code));return;}finally{// Release the Association and close the connectionprintSCU.Release();}}DicomNet.Shutdown();DicomEngine.Shutdown();}void GetPrinterInfo(DicomPrintScu printSCU){// Query the Print SCP for the informationtry{DicomPrinterInformation printerInfo = printSCU.GetPrinterInformation(null, true);StringBuilder msg = new StringBuilder();msg.AppendFormat("Printer Status: {0}{2}Printer Status Info: {1}", printerInfo.PrinterStatus, printerInfo.PrinterStatusInfo, Environment.NewLine);//Over here we can also investigate other printer information by accessing the following//properties from the DicomPrinterInformation class: TimeOfLastCalibration, DateOfLastCalibration,//SoftwareVersions, DeviceSerialNumber, ManufacturerModelName , Manufacturer, CreationDate, and CreationTime.Console.WriteLine($"Printer Info: {msg.ToString()}");}catch (DicomException ex){Console.WriteLine(string.Format("Failed to get printer information, Error code: {0}", ex.Code));}}void GetPrinterConfigInfo(DicomPrintScu printSCU){// Assume that the Association is already establishedtry{// Query the Print SCP for the printer configuration informationDicomDataSet printerConfiguration = printSCU.GetPrinterConfiguration();// We will display only the Printer Name and Memory Bit Depth// in the first ItemDicomElement element = printerConfiguration.FindFirstElement(null, DicomTag.PrinterConfigurationSequence, false);if (element == null)return;element = printerConfiguration.GetChildElement(element, true);if (element == null)return;element = printerConfiguration.GetChildElement(element, true);if (element == null)return;StringBuilder msg = new StringBuilder();msg.Append("Printer Name: ");DicomElement printerName = printerConfiguration.FindFirstElement(element, DicomTag.PrinterName, true);if (printerName != null){string name = printerConfiguration.GetStringValue(printerName, 0);if (name != null){msg.AppendFormat("{0}{1}", name, Environment.NewLine);}else{msg.AppendFormat("N/A{0}", Environment.NewLine);}}msg.Append("Memory Bit Depth: ");DicomElement memoryBitDepth = printerConfiguration.FindFirstElement(element, DicomTag.MemoryBitDepth, true);if (memoryBitDepth != null){short[] value = printerConfiguration.GetShortValue(memoryBitDepth, 0, 1);if (value.Length > 0){msg.AppendFormat("{0}", value[0]);}else{msg.Append("N/A");}}Console.WriteLine($"Printer Config Info: {msg.ToString()}");}catch (DicomException ex){Console.WriteLine(string.Format("Failed to get Printer Configuration Info, Error code: {0}", ex.Code));}}void GetPrintJobInfo(DicomPrintScu printSCU, string printJobInstanceUID){// Query the Print SCP for the Print Job informationtry{DicomPrintJobInformation printJobInfo = printSCU.GetPrintJobInformation(printJobInstanceUID, null);StringBuilder msg = new StringBuilder();msg.AppendFormat("Execution Status: {0}{2}Execution Status Info: {1}",printJobInfo.ExecutionStatus,printJobInfo.ExecutionStatusInfo,Environment.NewLine);Console.WriteLine($"Print Job Info: {msg.ToString()}");}catch (DicomException ex){Console.WriteLine(string.Format("Failed to get Print Job information, Error code: {0}", ex.Code));}}static class LEAD_VARS{public const string ImagesDir = @"C:\LEADTOOLS21\Resources\Images";}
Imports LeadtoolsImports Leadtools.DicomPublic Class MyDicomPrintSCU : Inherits DicomPrintSCUPublic Sub New(ByVal path As String)MyBase.New(path)End SubPublic Overrides Sub OnStatus(ByVal status As DicomPrintScuStatus, ByVal operationStatus As DicomCommandStatusType)Dim statusCodeType As String = "Unknown"Dim msg As StringBuilder = New StringBuilder()Select Case statusCase DicomPrintScuStatus.ReceiveAbortDim printSCUAbortInfo As DicomPrintScuAbortInformation = GetAbortInformation()msg.AppendFormat("Source = {0}, Reason = {1}", printSCUAbortInfo.Source, printSCUAbortInfo.Reason)MessageBox.Show(msg.ToString(), "Print SCP Aborted the Association", MessageBoxButtons.OK)Case DicomPrintScuStatus.ReceivePrintFilmSessionRspDim commandStatusType As DicomCommandStatusType = GetLastOperationStatus()If operationStatus = DicomCommandStatusType.Success ThenIf commandStatusType = DicomCommandStatusType.Success ThenstatusCodeType = "Success"ElsestatusCodeType = "Warning"End IfElsestatusCodeType = "Failure"End Ifmsg.AppendFormat("Status: 0x{0:X4} {1}", commandStatusType, statusCodeType)MessageBox.Show(msg.ToString(), "Received N-ACTION-RSP (Basic Film Session SOP Class)", MessageBoxButtons.OK)End SelectEnd SubPublic Overrides Sub OnPrinterReport(ByVal eventTypeID As Integer, ByVal reportInfo As DicomPrinterReportInformation)Dim msg As StringBuilder = New StringBuilder()Dim eventTypeName As String = "Normal"Select Case eventTypeIDCase 2eventTypeName = "Warning"Case 3eventTypeName = "Failure"End Selectmsg.AppendFormat("Event Type Name: {0}", eventTypeName)If eventTypeID <> 1 AndAlso Not reportInfo Is Nothing ThenIf Not reportInfo.PrinterStatusInfo Is Nothing Thenmsg.AppendFormat("{0}Printer Status Info: {1}", Environment.NewLine, reportInfo.PrinterStatusInfo)End IfIf Not reportInfo.FilmDestination Is Nothing Thenmsg.AppendFormat("{0}Film Destination: {1}", Environment.NewLine, reportInfo.FilmDestination)End IfIf Not reportInfo.PrinterName Is Nothing Thenmsg.AppendFormat("{0}Printer Name: {1}", Environment.NewLine, reportInfo.PrinterName)End IfEnd IfMessageBox.Show(msg.ToString(), "Printer Status Report", MessageBoxButtons.OK)End SubPublic Overrides Sub OnPrintJobReport(ByVal printJobInstanceUID As String, ByVal eventTypeID As Integer, ByVal reportInfo As DicomPrintJobReportInformation)Dim msg As StringBuilder = New StringBuilder()msg.AppendFormat("Print Job SOP Instance UID: {0}", printJobInstanceUID)Dim eventTypeName As String = "Pending"Select Case eventTypeIDCase 2eventTypeName = "Printing"Case 3eventTypeName = "Done"Case 4eventTypeName = "Failure"End Selectmsg.AppendFormat("{0}Event Type Name: {1}", Environment.NewLine, eventTypeName)If Not reportInfo Is Nothing ThenIf Not reportInfo.ExecutionStatusInfo Is Nothing Thenmsg.AppendFormat("{0}Execution Status Info: {1}", Environment.NewLine, reportInfo.ExecutionStatusInfo)End IfIf Not reportInfo.FilmSessionLabel Is Nothing Thenmsg.AppendFormat("{0}Film Session Label: {1}", Environment.NewLine, reportInfo.FilmSessionLabel)End IfIf Not reportInfo.PrinterName Is Nothing Thenmsg.AppendFormat("{0}Printer Name: {1}", Environment.NewLine, reportInfo.PrinterName)End IfEnd IfMessageBox.Show(msg.ToString(), "Print Job Status Report", MessageBoxButtons.OK)End SubEnd ClassPrivate Sub PerformBasicPM()'It's assumed that support for medical communication is already unlocked'Make sure to initialize the DICOM engine, this needs to be done only once'In the whole applicationDicomEngine.Startup()'Make sure to initialize the DICOM Communication engine, this needs to be done only once'In the whole applicationDicomNet.Startup()'The DicomPrintSCU is disposable, this is why we are using the "using" keywordDim printSCU As MyDicomPrintSCU = New MyDicomPrintSCU(Nothing)Using (printSCU)printSCU.SetTimeout(60)Try' Establish the AssociationDim ret As Boolean = printSCU.Associate("10.1.1.209", 7104, "PrintSCP", "PrintSCU", DicomPrintScuPrintManagementClassFlags.BasicGrayscalePmMetaSopClass OrDicomPrintScuPrintManagementClassFlags.BasicColorPmMetaSopClass OrDicomPrintScuPrintManagementClassFlags.BasicAnnotationBoxSopClass OrDicomPrintScuPrintManagementClassFlags.BasicPrintImageOverlayBoxSopClass OrDicomPrintScuPrintManagementClassFlags.PresentationLutSopClass OrDicomPrintScuPrintManagementClassFlags.PrintJobSopClass OrDicomPrintScuPrintManagementClassFlags.PrinterConfigurationRetrievalSopClass)'The method will return false if the association was rejected,'if some other error occurred then an exception will be thrownIf ret = False ThenDim associateRejectInfo As DicomPrintScuAssociateRejectInformation = printSCU.GetAssociateRejectInformation()If Not associateRejectInfo Is Nothing ThenDim msg As StringBuilder = New StringBuilder()msg.AppendFormat("Source = {0}, Reason = {1}", associateRejectInfo.Source, associateRejectInfo.Reason)MessageBox.Show(msg.ToString())ReturnEnd IfEnd If' Display some printer infoGetPrinterInfo(printSCU)' Display some printer configuration infoGetPrinterConfigInfo(printSCU)' Create a Film SessionDim filmSessionParameters As DicomFilmSessionParameters = printSCU.GetDefaultFilmSessionParameters()filmSessionParameters.NumberOfCopies = 1'Over here we can set some other film session parameters before creating the film session.'To set these parameters we can access one or more of these properties:'DicomFilmSessionParameters.NumberOfCopies'DicomFilmSessionParameters.MemoryAllocation'DicomFilmSessionParameters.OwnerID'DicomFilmSessionParameters.PrintPriority'DicomFilmSessionParameters.MediumType'DicomFilmSessionParameters.FilmDestination'DicomFilmSessionParameters.FilmSessionLabelprintSCU.CreateFilmSession(filmSessionParameters, True)MessageBox.Show(printSCU.GetFilmSessionInstanceUid(), "Film Session SOP Instance UID", MessageBoxButtons.OK)' Update the Film Session to specify a "MED" Print PriorityfilmSessionParameters = printSCU.GetDefaultFilmSessionParameters()filmSessionParameters.PrintPriority = "MED"printSCU.UpdateFilmSession(filmSessionParameters)Dim filmBoxParameters As DicomFilmBoxParameters = printSCU.GetDefaultFilmBoxParameters()If printSCU.IsClassSupported(DicomPrintScuPrintManagementClassFlags.BasicAnnotationBoxSopClass) ThenfilmBoxParameters.AnnotationDisplayFormatID = "SomeID"End If'Over here we can set some other film box parameters before creating the film box.'To set these parameters we can access one or more of these properties:'DicomFilmBoxParameters.ImageDisplayFormat'DicomFilmBoxParameters.FilmOrientation'DicomFilmBoxParameters.FilmSizeID'DicomFilmBoxParameters.ConfigurationInformation'DicomFilmBoxParameters.AnnotationDisplayFormatID'DicomFilmBoxParameters.SmoothingType'DicomFilmBoxParameters.BorderDensity'DicomFilmBoxParameters.EmptyImageDensity'DicomFilmBoxParameters.Trim'DicomFilmBoxParameters.RequestedResolutionID'DicomFilmBoxParameters.MaxDensity'DicomFilmBoxParameters.MinDensity'DicomFilmBoxParameters.Illumination'DicomFilmBoxParameters.ReflectedAmbientLight'DicomFilmBoxParameters.MagnificationType' Create a Film BoxprintSCU.CreateFilmBox(filmBoxParameters, Nothing)MessageBox.Show(printSCU.GetFilmBoxInstanceUid(), "Film Box SOP Instance UID", MessageBoxButtons.OK)' Create a Presentation LUTIf printSCU.IsClassSupported(DicomPrintScuPrintManagementClassFlags.PresentationLutSopClass) Then' Make sure that you have a valid presentation state dataset,' otherwise leave this code commented out''using (DicomDataSet presentationLUTDataset = new DicomDataSet())'{'//Load DICOM File'presentationLUTDataset.Load(@"C:\PresLUT.dcm", DicomDataSetLoadFlags.None);'printSCU.CreatePresentationLUT(presentationLUTDataset, null);'string presLUTInstanceUID = printSCU.GetPresentationLutInstanceUid();'if(presLUTInstanceUID != null)'{'MessageBox.Show(presLUTInstanceUID, "Pres LUT SOP Instance UID", MessageBoxButtons.OK);'printSCU.UpdateFilmBox(null, presLUTInstanceUID);'}'}'End IfDim imageDataset As DicomDataSet = New DicomDataSet()Using (imageDataset)'Load DICOM FileimageDataset.Load(Path.Combine(LEAD_VARS.ImagesDir, "IMAGE3.dcm"), DicomDataSetLoadFlags.LoadAndClose)' Update the Image Box. Since the Image Display Format of the Film Box was' set to "STANDARD\1,1", then we are supposed to have one Image Box created' by the Print SCP.If printSCU.GetImageBoxesCount() > 0 ThenMessageBox.Show(printSCU.GetImageBoxInstanceUid(0), "Image Box SOP Instance UID", MessageBoxButtons.OK)Dim imageBoxParameters As DicomImageBoxParameters = printSCU.GetDefaultImageBoxParameters()imageBoxParameters.ImagePosition = 1'Over here we can set some other image box parameters before updating the image box.'To set these parameters we can access one or more of these properties:'DicomImageBoxParameters.MinDensity'DicomImageBoxParameters.MaxDensity'DicomImageBoxParameters.RequestedImageSize'DicomImageBoxParameters.Polarity'DicomImageBoxParameters.MagnificationType'DicomImageBoxParameters.SmoothingType'DicomImageBoxParameters.ConfigurationInformation'DicomImageBoxParameters.RequestedDecimateCropBehaviorprintSCU.UpdateImageBox(printSCU.GetImageBoxInstanceUid(0), imageDataset, 0, imageBoxParameters, Nothing, Nothing)' We don't need them any moreprintSCU.FreeImageBoxesInstanceUids()End IfEnd Using' Update the Annotation Boxes (if there are any)Dim annotationBoxCount As Integer = printSCU.GetAnnotationBoxesCount()Dim i As Integer = 0Do While i < annotationBoxCountprintSCU.UpdateAnnotationBox(printSCU.GetAnnotationBoxInstanceUid(i), i + 1, "Some Text")i += 1LoopprintSCU.FreeAnnotationBoxesInstanceUids() ' We don't need them any more' Print the Film Session (or the Film Box; there is no difference since we' have a single Film Box in the Film Session)printSCU.PrintFilmSession()' We can also call this'PrintSCU.PrintFilmBox();' Display some info about the Print JobIf printSCU.IsClassSupported(DicomPrintScuPrintManagementClassFlags.PrintJobSopClass) ThenGetPrintJobInfo(printSCU, printSCU.GetPrintJobInstanceUid())End If' Delete the Film Box (anyway, it would be deleted when the Film Session' is deleted)printSCU.DeleteFilmBox()' Delete the Film SessionprintSCU.DeleteFilmSession()' We can also call printSCU.DeletePresentationLUT and printSCU.DeleteOverlayBox' to Delete the Presentation LUT and the Image Overlay BoxCatch ex As DicomExceptionMessageBox.Show(String.Format("An error occurred, code: {0}", ex.Code))ReturnFinally' Release the Association and close the connectionprintSCU.Release()End TryEnd UsingDicomNet.Shutdown()DicomEngine.Shutdown()End SubPrivate Sub GetPrinterInfo(ByVal printSCU As DicomPrintScu)' Query the Print SCP for the informationTryDim printerInfo As DicomPrinterInformation = printSCU.GetPrinterInformation(Nothing, True)Dim msg As StringBuilder = New StringBuilder()msg.AppendFormat("Printer Status: {0}{2}Printer Status Info: {1}", printerInfo.PrinterStatus, printerInfo.PrinterStatusInfo, Environment.NewLine)'Over here we can also investigate other printer information by accessing the following'properties from the DicomPrinterInformation class: TimeOfLastCalibration, DateOfLastCalibration,'SoftwareVersions, DeviceSerialNumber, ManufacturerModelName , Manufacturer, CreationDate, and CreationTime.MessageBox.Show(msg.ToString(), "Printer Info", MessageBoxButtons.OK)Catch ex As DicomExceptionMessageBox.Show(String.Format("Failed to get printer information, Error code: {0}", ex.Code))End TryEnd SubPrivate Sub GetPrinterConfigInfo(ByVal printSCU As DicomPrintScu)' Assume that the Association is already establishedTry' Query the Print SCP for the printer configuration informationDim printerConfiguration As DicomDataSet = printSCU.GetPrinterConfiguration()' We will display only the Printer Name and Memory Bit Depth' in the first ItemDim element As DicomElement = printerConfiguration.FindFirstElement(Nothing, DicomTag.PrinterConfigurationSequence, False)If element Is Nothing ThenReturnEnd Ifelement = printerConfiguration.GetChildElement(element, True)If element Is Nothing ThenReturnEnd Ifelement = printerConfiguration.GetChildElement(element, True)If element Is Nothing ThenReturnEnd IfDim msg As StringBuilder = New StringBuilder()msg.Append("Printer Name: ")Dim printerName As DicomElement = printerConfiguration.FindFirstElement(element, DicomTag.PrinterName, True)If Not printerName Is Nothing ThenDim name As String = printerConfiguration.GetStringValue(printerName, 0)If Not name Is Nothing Thenmsg.AppendFormat("{0}{1}", name, Environment.NewLine)Elsemsg.AppendFormat("N/A{0}", Environment.NewLine)End IfEnd Ifmsg.Append("Memory Bit Depth: ")Dim memoryBitDepth As DicomElement = printerConfiguration.FindFirstElement(element, DicomTag.MemoryBitDepth, True)If Not memoryBitDepth Is Nothing ThenDim value As Short() = printerConfiguration.GetShortValue(memoryBitDepth, 0, 1)If value.Length > 0 Thenmsg.AppendFormat("{0}", value(0))Elsemsg.Append("N/A")End IfEnd IfMessageBox.Show(msg.ToString(), "Printer Config Info", MessageBoxButtons.OK)Catch ex As DicomExceptionMessageBox.Show(String.Format("Failed to get Printer Configuration Info, Error code: {0}", ex.Code))End TryEnd SubPrivate Sub GetPrintJobInfo(ByVal printSCU As DicomPrintScu, ByVal printJobInstanceUID As String)' Query the Print SCP for the Print Job informationTryDim printJobInfo As DicomPrintJobInformation = printSCU.GetPrintJobInformation(printJobInstanceUID, Nothing)Dim msg As StringBuilder = New StringBuilder()msg.AppendFormat("Execution Status: {0}{2}Execution Status Info: {1}", printJobInfo.ExecutionStatus, printJobInfo.ExecutionStatusInfo, Environment.NewLine)MessageBox.Show(msg.ToString(), "Print Job Info", MessageBoxButtons.OK)Catch ex As DicomExceptionMessageBox.Show(String.Format("Failed to get Print Job information, Error code: {0}", ex.Code))End TryEnd SubPublic NotInheritable Class LEAD_VARSPublic Const ImagesDir As String = "C:\LEADTOOLS21\Resources\Images"End Class
Associate(String,Int32,String,Int32,String,String,DicomPrintScuPrintManagementClassFlags) Method
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
