RIS中PDF转换DICOM文件(dicomcs )
RIS调用dicomcs 根据传入pdf路径 生成DCM文件的代码
说明:(非DCM图像,只是存储了)
生成DICOM文件的基本代码
FileDicom deal = new FileDicom(); DicomFileInfo info = new DicomFileInfo(); info.AccessionNum = modalityid; //检查号 info.FilePath = file; //pdf路径 info.InsNum = "9"; info.PatientAge = CurApply.PAT_AGE; //年龄 info.PatientBirthDate = CurPatient.BIRTHDATE == null ? "" : ((DateTime)CurPatient.BIRTHDATE).ToString("yyyy-MM-dd"); //出生年月 info.PatientID = patid; //影像号 info.PatientName = CurPatient.PATNAME; //姓名 info.PatientSex = CurPatient.SEX; //性别 info.SeriesNum = "90001"; info.SeriesUID = "2.2.280.8888." + modalityid; info.SopUID = "2.2.280.9999." + modalityid; info.StudyDate = CurApply.ACCESSION_DATE.ToString("yyyyMMdd"); //检查日期 info.StudyID = modalityid; // 检查号 info.StudyInsUID = "2.2.280.7777." + modalityid; info.StudyTime = CurApply.ACCESSION_DATE.ToString("hh:mm:ss"); //检查时间 info.FileName = Path.GetFileNameWithoutExtension(file); //文件名称 info.FileType = "pdf"; //类型 info.Modality = "SR"; //l类型 string outFile = string.Format(@"{0}\{1}_{2}.dcm", tempDicomPath, modalityid, info.FileName); //输出路径 deal.GenerateFileDicom(info, outFile); //生成文件
FileDicom 类,生成文件:
public class FileDicom { public const uint FILETAG = 0x7f010001; public const uint FILETYPETAG = 0x00810001; public const uint FILENAMETAG = 0x00810002; public void GenerateFileDicom(DicomFileInfo info, string outPath) { if (info == null) return; string dcmPath = string.Empty; DcmDataset ds = null; try { ds = this.GenerateStanderDcmDataset(info); } catch (Exception ex) { throw new Exception("构造报告dicom文件时出错:" + ex.Message); } try { ds.DcmSaveToFile(outPath, ds, UIDs.ExplicitVRLittleEndian); } catch (Exception ex) { throw new Exception("构造报告dicom文件时出错:" + ex.Message); } } public string ParseFile(string dcmFile, string outDirectory, string fileType = "") { string res = string.Empty; int index = 0; int len = 0; OpenDcmFile a = new OpenDcmFile(); a.Load(dcmFile); ByteBuffer b = a.ds.GetByteBuffer(FileDicom.FILETAG); byte[] data = b.ToArray(); len = data.Length; string fileName = a.ds.GetStringByEncoding(FileDicom.FILENAMETAG, Encoding.Default); fileName = DateTime.Now.ToString("yyyyMMddHHmmssffffff") + "_" + fileName; string type = a.ds.GetStringByEncoding(FileDicom.FILETYPETAG, Encoding.Default); if (!string.IsNullOrEmpty(fileType)) type = fileType; res = Path.Combine(outDirectory, fileName + "." + type); try { FileStream fs1 = new FileStream(res, FileMode.OpenOrCreate); if (data.Length > 4) { byte[] srLenByte = new byte[4]; srLenByte[0] = data[0]; srLenByte[1] = data[1]; srLenByte[2] = data[2]; srLenByte[3] = data[3]; int srLen = BitConverter.ToInt32(srLenByte, 0); if ((srLen + 5 == data.Length) || (srLen + 4 == data.Length)) { index = 4; len -= 4; } } fs1.Write(data, index, len); fs1.Close(); } catch { } return res; } public string ParseFile(string dcmFile, string outDirectory, out string req_procid, string type = "") { string res = string.Empty; int index = 0; int len = 0; OpenDcmFile a = new OpenDcmFile(); a.Load(dcmFile); req_procid = a.ds.GetStringByEncoding(Tags.AccessionNumber, Encoding.Default); ByteBuffer b = a.ds.GetByteBuffer(FileDicom.FILETAG); byte[] data = b.ToArray(); len = data.Length; string fileName = a.ds.GetStringByEncoding(FileDicom.FILENAMETAG, Encoding.Default); string fileType = a.ds.GetStringByEncoding(FileDicom.FILETYPETAG, Encoding.Default); if (!string.IsNullOrEmpty(type)) fileType = type; fileName = DateTime.Now.ToString("yyyyMMddHHmmssffffff") + "_" + fileName; res = Path.Combine(outDirectory, fileName + "." + fileType); try { FileStream fs1 = new FileStream(res, FileMode.OpenOrCreate); if (data.Length > 4) { byte[] srLenByte = new byte[4]; srLenByte[0] = data[0]; srLenByte[1] = data[1]; srLenByte[2] = data[2]; srLenByte[3] = data[3]; int srLen = BitConverter.ToInt32(srLenByte, 0); if ((srLen + 5 == data.Length) || (srLen + 4 == data.Length)) { index = 4; len -= 4; } } fs1.Write(data, index, len); fs1.Close(); } catch { } return res; } private DcmDataset GenerateStanderDcmDataset(DicomFileInfo info) { DcmDataset ds = new DcmDataset(); FileMetaInfo fmi = new FileMetaInfo(); fmi.PutOB(Tags.FileMetaInformationVersion, new byte[] { 0, 1 }); fmi.PutUI(Tags.MediaStorageSOPClassUID, UIDs.BasicTextSR); fmi.PutUI(Tags.MediaStorageSOPInstanceUID, "1.2.276.0.7230010.3.1.4.3580585151.2940.1297390871.2"); fmi.PutUI(Tags.TransferSyntaxUID, UIDs.ExplicitVRLittleEndian); fmi.PutCS(Tags.ImplementationClassUID, "1.2.276.0.7230010.3.0.3.5.4"); fmi.PutSH(Tags.ImplementationVersionName, "bluesky"); ds.SetFileMetaInfo(fmi); ds.PutCS(Tags.PatientID, info.PatientID); ds.PutCS(Tags.PatientName, info.PatientName); ds.PutDA(Tags.PatientBirthDate, info.PatientBirthDate); ds.PutCS(Tags.PatientSex, info.PatientSex); ds.PutUI(Tags.StudyInstanceUID, info.StudyInsUID); ds.PutDA(Tags.StudyDate, info.StudyDate); ds.PutTM(Tags.StudyTime, info.StudyTime); ds.PutCS(Tags.AccessionNumber, info.AccessionNum); ds.PutCS(Tags.StudyID, info.StudyID); ds.PutAS(Tags.PatientAge, info.PatientAge); ds.PutCS(Tags.Modality, info.Modality); ds.PutUI(Tags.SeriesInstanceUID, info.SeriesUID); ds.PutIS(Tags.SeriesNumber, info.SeriesNum); ds.PutCS(Tags.SpecificCharacterSet, "ISO_IR 100"); ds.PutUI(Tags.SOPClassUID, "1.2.840.10008.5.1.4.1.1.88.59"); ds.PutUI(Tags.SOPInstanceUID, info.SopUID); ds.PutCS(Tags.InstanceNumber, info.InsNum); ds.PutCS((uint)0x00810001, info.FileType); ds.PutCS((uint)0x00810002, info.FileName); FileStream stream = new FileStream(info.FilePath, FileMode.Open); byte[] bb = new byte[stream.Length]; stream.Read(bb, 0, (int)stream.Length); ds.PutOB(FILETAG, bb); stream.Close(); return ds; } }
DicomFileInfo辅助类:
public class DicomFileInfo { private string accessionNum = null; private string modality = null; private string filePath = null; private string insNum = null; private string patientAge = null; private string patientBirthDate = null; private string patientID = null; private string seriesNum = null; private string patientName = null; private string patientSex = null; private string seriesUID = null; private string sopUID = null; private string studyDate = null; private string studyID = null; private string studyInsUID = null; private string studyTime = null; private string fileName = null; private string fileType = null; public string Modality { get { return modality; } set { modality = value; } } public string FileType { get { return fileType; } set { fileType = value; } } public string FileName { get { return fileName; } set { fileName = value; } } public string FilePath { get { return filePath; } set { filePath = value; } } public string AccessionNum { get { return this.accessionNum; } set { this.accessionNum = value; } } public string InsNum { get { return this.insNum; } set { this.insNum = value; } } public string PatientAge { get { return this.patientAge; } set { this.patientAge = value; } } public string PatientBirthDate { get { return this.patientBirthDate; } set { this.patientBirthDate = value; } } public string PatientID { get { return this.patientID; } set { this.patientID = value; } } public string PatientName { get { return this.patientName; } set { this.patientName = value; } } public string PatientSex { get { return this.patientSex; } set { this.patientSex = value; } } public string SeriesNum { get { return this.seriesNum; } set { this.seriesNum = value; } } public string SeriesUID { get { return this.seriesUID; } set { this.seriesUID = value; } } public string SopUID { get { return this.sopUID; } set { this.sopUID = value; } } public string StudyDate { get { return this.studyDate; } set { this.studyDate = value; } } public string StudyID { get { return this.studyID; } set { this.studyID = value; } } public string StudyInsUID { get { return this.studyInsUID; } set { this.studyInsUID = value; } } public string StudyTime { get { return this.studyTime; } set { this.studyTime = value; } } }