static string ExtractPDFData(DicomDataSet ds)
        {
            string       pdfFullPath           = string.Empty;
            string       sopInstanceUID        = string.Empty;
            DicomElement sopInstanceUIDElement = ds.FindFirstElement(null, DicomTag.SOPInstanceUID, true);

            if (sopInstanceUIDElement == null)
            {
                return(pdfFullPath);
            }

            sopInstanceUID = ds.GetStringValue(sopInstanceUIDElement, 0);
            if (string.IsNullOrEmpty(sopInstanceUID))
            {
                return(pdfFullPath);
            }

            string tempFolder  = Path.GetTempPath();
            string pdfFileName = String.Format("{0}.pdf", sopInstanceUID);

            pdfFullPath = Path.Combine(tempFolder, pdfFileName);

            long         lCount;
            DicomElement ele = null;

            if (pdfFullPath == "")
            {
                return(string.Empty);
            }

            // check if the pdf has already been extracted
            if (File.Exists(pdfFullPath))
            {
                return(pdfFullPath);
            }

            ele = ds.FindFirstElement(null, DicomTag.EncapsulatedDocument, true);
            if (ele != null)
            {
                lCount = ele.Length;
                if (lCount == 0)
                {
                    return(string.Empty);
                }

                byte[] buf;

                // Get the bytes
                buf = ds.GetBinaryValue(ele, (int)lCount);

                // Dump PDF to file
                using (FileStream fileStream = new FileStream(pdfFullPath, FileMode.Create))
                {
                    fileStream.Write(buf, 0, buf.Length);
                    fileStream.Close();
                    //_pdfCreatedFiles.Add(path);
                }

                return(pdfFullPath);
            }

            return(string.Empty);
        }
Пример #2
0
        /*
         * Generates an SQL query based on the client's search parameters
         */
        private string GenerateMatchingQuery()
        {
            string       strSqlQuery       = "";
            string       strAttributeValue = "";
            DicomElement element;

            try
            {
                strSqlQuery = "SELECT * FROM MwlSCPTbl WHERE 1=1";

                // TAG_ACCESSION_NUMBER
                element = ds.FindFirstElement(null, DemoDicomTags.AccessionNumber, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild Card Matching or Single Value Matching
                        if ((strAttributeValue.IndexOf('*') >= 0) || (strAttributeValue.IndexOf('?') >= 0))
                        {
                            // Wild card matching -- case insensitive
                            strSqlQuery += " And TAG_ACCESSION_NUMBER LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                        }
                        else
                        {
                            // Single value matching -- case sensitive
                            strSqlQuery += " And TAG_ACCESSION_NUMBER = '" + strAttributeValue + "'";
                        }
                    }
                }

                // TAG_MODALITY
                element = ds.FindFirstElement(null, DemoDicomTags.Modality, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_MODALITY = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_INSTITUTION_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.InstitutionName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild Card Matching or Single Value Matching
                        if ((strAttributeValue.IndexOf('*') >= 0) || (strAttributeValue.IndexOf('?') >= 0))
                        {
                            // Wild card matching -- case insensitive
                            strSqlQuery += " And TAG_INSTITUTION_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                        }
                        else
                        {
                            // Single value matching -- case sensitive
                            strSqlQuery += " And TAG_INSTITUTION_NAME = '" + strAttributeValue + "'";
                        }
                    }
                }

                // TAG_REFERRING_PHYSICIAN_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.ReferringPhysicianName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_REFERRING_PHYSICIAN_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.PatientName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_PATIENT_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_ID
                element = ds.FindFirstElement(null, DemoDicomTags.PatientID, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_PATIENT_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_BIRTH_DATE
                element = ds.FindFirstElement(null, DemoDicomTags.PatientBirthDate, false);
                if (element != null)
                {
                    DicomDateValue[] dateValue = ds.GetDateValue(element, 0, 1);

                    if (dateValue.Length > 0)
                    {
                        strSqlQuery += " And (julianday(substr(TAG_PATIENT_BIRTH_DATE,1,10)) = julianday('" + ConvertDicomDateToQueryDate(dateValue[0]) + "'))";
                    }
                }

                // TAG_PATIENT_SEX
                element = ds.FindFirstElement(null, DemoDicomTags.PatientSex, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_PATIENT_SEX = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_PATIENT_WEIGHT
                element = ds.FindFirstElement(null, DemoDicomTags.PatientWeight, false);
                if (element != null)
                {
                    double[] dAttributeValue = ds.GetDoubleValue(element, 0, 1);

                    //strAttributeValue =
                    if (dAttributeValue.Length > 0)
                    {
                        strAttributeValue = dAttributeValue[0].ToString();
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_PATIENT_WEIGHT = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_STUDY_INSTANCE_UID
                strSqlQuery += GetUIDCondition((long)DemoDicomTags.StudyInstanceUID, "TAG_STUDY_INSTANCE_UID"); // List of Matching UIDs

                // TAG_REQUESTING_PHYSICIAN
                element = ds.FindFirstElement(null, DemoDicomTags.RequestingPhysician, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_REQUESTING_PHYSICIAN LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_REQUESTED_PROCEDURE_DESCRIPTION
                element = ds.FindFirstElement(null, DemoDicomTags.RequestedProcedureDescription, false);
                if ((strAttributeValue != null) && (strAttributeValue != ""))
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_REQUESTED_PROCEDURE_DESCRIPTION LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_ADMISSION_ID
                element = ds.FindFirstElement(null, DemoDicomTags.AdmissionID, false);
                if ((strAttributeValue != null) && (strAttributeValue != ""))
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_ADMISSION_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_STATION_AE_TITLE
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledStationAETitle, false);
                if ((strAttributeValue != null) && (strAttributeValue != ""))
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_SCHEDULED_STATION_AE_TITLE = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_START_DATE
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepStartDate, false);
                if (element != null)
                {
                    DicomDateValue[] dateValue = ds.GetDateValue(element, 0, 1);

                    if (dateValue.Length > 0)
                    {
                        strSqlQuery += " And (julianday(substr(TAG_SCHEDULED_PROCEDURE_STEP_START_DATE,1,10)) = julianday('" + ConvertDicomDateToQueryDate(dateValue[0]) + "'))";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_START_TIME
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepStartTime, false);
                if (element != null)
                {
                    DicomTimeValue[] timeValue = ds.GetTimeValue(element, 0, 1);

                    if (timeValue.Length > 0)
                    {
                        strSqlQuery += " And (julianday(substr(TAG_SCHEDULED_PROCEDURE_STEP_START_TIME,-8,8)) = julianday('" + ConvertDicomTimeToQueryTime(timeValue[0]) + "'))";
                    }
                }

                // TAG_SCHEDULED_PERFORMING_PHYSICIAN_NAME
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledPerformingPhysicianName, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_SCHEDULED_PERFORMING_PHYSICIAN_NAME LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_DESCRIPTION
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepDescription, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_SCHEDULED_PROCEDURE_STEP_DESCRIPTION LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_ID
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepID, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_SCHEDULED_PROCEDURE_STEP_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_SCHEDULED_PROCEDURE_STEP_LOCATION
                element = ds.FindFirstElement(null, DemoDicomTags.ScheduledProcedureStepLocation, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Wild card matching -- case insensitive
                        strSqlQuery += " And TAG_SCHEDULED_PROCEDURE_STEP_LOCATION LIKE '" + PrepareForWCM(strAttributeValue) + "'";
                    }
                }

                // TAG_REQUESTED_PROCEDURE_ID
                element = ds.FindFirstElement(null, DemoDicomTags.RequestedProcedureID, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_REQUESTED_PROCEDURE_ID = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_REASON_FOR_THE_REQUESTED_PROCEDURE
                element = ds.FindFirstElement(null, DemoDicomTags.ReasonForTheRequestedProcedure, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_REASON_FOR_THE_REQUESTED_PROCEDURE = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }

                // TAG_REQUESTED_PROCEDURE_PRIORITY
                element = ds.FindFirstElement(null, DemoDicomTags.RequestedProcedurePriority, false);
                if (element != null)
                {
                    strAttributeValue = ds.GetStringValue(element, 0);
                    if ((strAttributeValue != null) && (strAttributeValue != ""))
                    {
                        // Single value matching -- case sensitive
                        strSqlQuery += " And TAG_REQUESTED_PROCEDURE_PRIORITY = '" + FilterForSingleValueMatch(strAttributeValue) + "'";
                    }
                }
            }
            catch (Exception ex)
            {
                server.mf.Log("Error generating SQL query:\r\n\r\n" + ex.ToString());
                return("");
            }

            return(strSqlQuery);
        }
        static void fillOutputWithDicomDataSet(MedicalViewerPageInfo output, DicomDataSet ds)
        {
            DicomElement elemImagePatientOrientation   = ds.FindFirstElement(null, DicomTag.PatientOrientation, true);
            DicomElement elemImagePositionPatient      = ds.FindFirstElement(null, DicomTag.ImagePositionPatient, true);
            DicomElement elemImageOrientationPatient   = ds.FindFirstElement(null, DicomTag.ImageOrientationPatient, true);
            DicomElement elemImagerPixelSpacing        = ds.FindFirstElement(null, DicomTag.ImagerPixelSpacing, true);
            DicomElement elemPixelSpacing              = ds.FindFirstElement(null, DicomTag.PixelSpacing, true);
            DicomElement elemPhotometricInterpretation = ds.FindFirstElement(null, DicomTag.PhotometricInterpretation, true);


            if (null != elemPhotometricInterpretation)
            {
                string photometricInterpretation = ds.GetStringValue(elemPhotometricInterpretation, 0);
                output.SupportWindowLevel = photometricInterpretation == "MONOCHROME2" || photometricInterpretation == "MONOCHROME1";
            }

            if (null != elemImagePatientOrientation)
            {
                int count = ds.GetElementValueCount(elemImagePatientOrientation);
                if (count > 0)
                {
                    output.PatientOrientation = new string[count];
                    for (int index = 0; index < count; index++)
                    {
                        output.PatientOrientation[index] = ds.GetStringValue(elemImagePatientOrientation, index);
                    }
                }
            }
            if (null != elemImagePositionPatient)
            {
                output.ImagePositionPatientArray = ds.GetDoubleValue(elemImagePositionPatient, 0, 3);
                if (output.ImagePositionPatientArray.Length == 0)
                {
                    output.ImagePositionPatientArray = null;
                }
            }
            if (null != elemImageOrientationPatient)
            {
                output.ImageOrientationPatientArray = ds.GetDoubleValue(elemImageOrientationPatient, 0, 6);
                if (output.ImageOrientationPatientArray.Length == 0)
                {
                    output.ImageOrientationPatientArray = null;
                }
            }
            if (null != elemPixelSpacing)
            {
                output.PixelSpacingPatientArray = ds.GetDoubleValue(elemPixelSpacing, 0, 2);
                if (output.PixelSpacingPatientArray.Length == 0)
                {
                    output.PixelSpacingPatientArray = null;
                }
            }
            else if (null != elemImagerPixelSpacing)
            {
                output.PixelSpacingPatientArray = ds.GetDoubleValue(elemImagerPixelSpacing, 0, 2);
                if (output.PixelSpacingPatientArray.Length == 0)
                {
                    output.PixelSpacingPatientArray = null;
                }
            }
        }
Пример #4
0
        private void CheckFileMetaInfo(DicomDataSet ds)
        {
            DicomElement Temp;
            string       szValue;

            // File Meta Information Version
            DicomElement Element = ds.FindFirstElement(null, DemoDicomTags.FileMetaInformationVersion, false);

            if (Element == null)
            {
                Element = ds.InsertElement(null, false, DemoDicomTags.FileMetaInformationVersion, DicomVRType.UN, false, 0);
            }
            if (Element != null)
            {
                byte[] Values = new byte[2];
                Values[0] = 0x00;
                Values[1] = 0x01;

                ds.SetByteValue(Element, Values, 2);
            }

            // Media Storage SOP Class UID
            Element = ds.FindFirstElement(null, DemoDicomTags.MediaStorageSOPClassUID, false);
            if (Element == null)
            {
                Element = ds.InsertElement(null, false, DemoDicomTags.MediaStorageSOPClassUID, DicomVRType.UN, false, 0);
            }
            if (Element != null)
            {
                Temp = ds.FindFirstElement(null, DemoDicomTags.SOPClassUID, false);
                if (Temp != null)
                {
                    szValue = ds.GetStringValue(Temp, 0);
                    if (szValue != string.Empty)
                    {
                        ds.SetStringValue(Element, szValue, DicomCharacterSetType.Default);
                    }
                }
            }

            // Media Storage SOP Instance UID
            Element = ds.FindFirstElement(null, DemoDicomTags.MediaStorageSOPInstanceUID, false);
            if (Element == null)
            {
                Element = ds.InsertElement(null, false, DemoDicomTags.MediaStorageSOPInstanceUID, DicomVRType.UN, false, 0);
            }
            if (Element != null)
            {
                Temp = ds.FindFirstElement(null, DemoDicomTags.SOPInstanceUID, false);
                if (Temp != null)
                {
                    szValue = ds.GetStringValue(Temp, 0);
                    if (szValue != string.Empty)
                    {
                        ds.SetStringValue(Element, szValue, DicomCharacterSetType.Default);
                    }
                }
            }

            // Implementation Class UID
            Element = ds.FindFirstElement(null, DemoDicomTags.ImplementationClassUID, false);
            if (Element == null)
            {
                Element = ds.InsertElement(null, false, DemoDicomTags.ImplementationClassUID, DicomVRType.UN, false, 0);
            }
            if (Element != null)
            {
                ds.SetStringValue(Element, LEAD_IMPLEMENTATION_CLASS_UID, DicomCharacterSetType.Default);
            }

            // Implementation Version Name
            Element = ds.FindFirstElement(null, DemoDicomTags.ImplementationVersionName, false);
            if (Element == null)
            {
                Element = ds.InsertElement(null, false, DemoDicomTags.ImplementationVersionName, DicomVRType.UN, false, 0);
            }
            if (Element != null)
            {
                ds.SetStringValue(Element, LEAD_IMPLEMENTATION_VERSION_NAME, DicomCharacterSetType.Default);
            }
        }