2017-10-25 11 views
1

나는 HL7 메시지를 구문 분석하고 텍스트 파일에 데이터를 쓸 C# 프로그램을 작성 중입니다. HL7에는 또한 기본 64 형식의 PDF가 포함되어 있습니다. 나는 base64로 인코딩 된 pdf와 그것도 디코딩해야한다. HL7에서 PDF를 추출하십시오.

 string fileLocation = @"hl7file.hl7"; 

     var message = File.ReadAllText(fileLocation); 

     PipeParser parser = new PipeParser(); 

     IMessage m = parser.Parse(message);//str message will contain your HL7 Message 
     ADT_A03 adtA02 = m as ADT_A03; 

     ORU_R01 oru = m as ORU_R01; 
     ORU_R01_PATIENT patient = oru.GetPATIENT_RESULT().PATIENT; 

     ORU_R01_ORDER_OBSERVATION orderObservation = oru.GetPATIENT_RESULT().GetORDER_OBSERVATION(); 
     OBR obr = orderObservation.OBR; 

     PID pid = patient.PID; 

     string PatientId = pid.GetPatientIdentifierList(0).IDNumber.ToString(); 

     ORU_R01_OBSERVATION observation = orderObservation.GetOBSERVATION(0); 
     OBX obx = observation.OBX; 


     var pdfFile = obx.GetObservationValue(0).data; 

     Dictionary<string, string> hl7Data = new Dictionary<string, string>(); 

     hl7Data.Add("Patient ID", PatientId = pid.GetPatientIdentifierList(0).IDNumber.ToString()); 
     hl7Data.Add("Last_Name", pid.GetPatientName(0).FamilyName.Surname.Value); 
     hl7Data.Add("First_Name", pid.GetPatientName(0).GivenName.Value); 
     hl7Data.Add("DOB", pid.DateTimeOfBirth.Time.ToString()); 
     hl7Data.Add("Sex", pid.AdministrativeSex.Value); 
     hl7Data.Add("Address", pid.GetPatientAddress(0).StreetAddress.StreetOrMailingAddress.Value); 
     hl7Data.Add("City", pid.GetPatientAddress(0).City.Value); 
     hl7Data.Add("State", pid.GetPatientAddress(0).StateOrProvince.Value); 
     hl7Data.Add("Zip_Code", pid.GetPatientAddress(0).ZipOrPostalCode.Value); 
     hl7Data.Add("Signature_Required", obr.PriorityOBR.Value); 
     hl7Data.Add("Referring_Physician_Last_Name", obr.GetOrderingProvider(0).FamilyName.Surname.Value); 
     hl7Data.Add("Referring_Physician_First_Name", obr.GetOrderingProvider(0).GivenName.Value); 
     hl7Data.Add("NPI", obr.GetOrderingProvider(0).IdentifierTypeCode.Value); 
     hl7Data.Add("Observation_Date", obr.ObservationDateTime.Time.ToString()); 
     hl7Data.Add("File_Type", obr.UniversalServiceIdentifier.Identifier.Value); 
     hl7Data.Add("File_Description", obr.UniversalServiceIdentifier.Text.Value); 

     using (StreamWriter file = new StreamWriter(@"C:\Users\samin.khan\Desktop\myfile.txt")) 
     { 
      foreach (var entry in hl7Data) 
      { 
       file.WriteLine("{0}: {1}", entry.Key, entry.Value); 
      } 
     } 

그래서 라인 VAR pdfFile = obx.GetObservationValue (0) .DATA는 base64로 형식으로 PDF를 보여 주지만, 나는 데이터에 액세스 할 수 없습니다입니다. 필자는 pdffile 객체 내부의 pdf 값을 명확하게 볼 수 있지만 액세스 할 수는 없습니다. 이미지 첨부 파일을 확인하십시오.

PDF 데이터에 액세스하려면 어떻게해야합니까?

사용 :

using NHapi.Base.Parser; 
using NHapi.Model.V25.Datatype; 
using NHapi.Model.V25.Message; 
using NHapi.Model.V25.Group; 
using NHapi.Model.V25.Segment; 
using NHapi.Base.Model; 

이미지 : Can't access Data item in object

ED (캡슐화 된 데이터) 개체로 캐스팅 한 후 : After casting it as ED object

+0

base64에서 디코딩 했습니까? – MB34

+0

obx.GetObservationValue (0) .Data에 액세스 할 수 없으므로 아직 아닙니다. 중단 점을 설정했지만 base64 값 문자열/var을 할당 할 수 없을 때 볼 수 있습니다. var를 사용하면 obx.GetObservationValue (0) .Data가 개체로 표시됩니다. –

+0

변수 pdfFile을 디코딩하려고 할 때 오류가 발생합니다. – MB34

답변

2

그냥 원래의 스크린 샷을 가고, 당신은 할 수 있어야한다 다음 :

var ed = axc.Data as ED; 
if (ed != null) 
{ 
    var bytes = Convert.FromBase64String(ed.Data); 
    File.WriteAllBytes("SomeFileName.pdf", bytes); 
} 
1
 ED embeddedPDF = (ED)obx.GetObservationValue(0).Data; 

     if (embeddedPDF != null) 
     { 
      var bytes = Convert.FromBase64String(embeddedPDF.Data.Value); 
      File.WriteAllBytes("SomeFileName.pdf", bytes); 
     } 

많은 분들께 감사드립니다.