Last active
June 4, 2025 22:32
-
-
Save swalex/34a6213897958334869ca5d37d7e0177 to your computer and use it in GitHub Desktop.
Encapsulate (save) PDF with FO-DICOM (into a DCM file)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static void Encapsulate( Patient patient, Study study, Institution institution, string directory, string filename, byte[] pdf ) | |
{ | |
var name = new DicomPersonName( DicomTag.PatientName, patient.LastName, patient.FirstName, | |
patient.MiddleName, patient.NamePrefix, patient.NameSuffix ); | |
var studyUID = new DicomUID( study.InstanceUID, "Study Instance UID", DicomUidType.SOPInstance ); | |
var company = Assembly.GetEntryAssembly().GetCustomAttribute<AssemblyCompanyAttribute>().Company; | |
var product = Assembly.GetEntryAssembly().GetCustomAttribute<AssemblyProductAttribute>().Product; | |
DicomDataset[] refItems = study.Series | |
.SelectMany( s => s.Datasets ) | |
.Select( d => new DicomDataset | |
{ | |
{ DicomTag.ReferencedSOPClassUID, d.ClassUID }, | |
{ DicomTag.ReferencedSOPInstanceUID, d.InstanceUID } | |
} ).ToArray(); | |
var sourceInstances = new DicomSequence( DicomTag.SourceInstanceSequence, refItems ); | |
var conceptName = new DicomSequence( DicomTag.ConceptNameCodeSequence ); | |
var generator = new DicomUIDGenerator(); | |
var dataset = new DicomDataset | |
{ | |
{ DicomTag.SpecificCharacterSet, series.SpecificCharacterSet }, | |
{ DicomTag.InstanceCreationDate, DateTime.Now }, | |
{ DicomTag.InstanceCreationTime, DateTime.Now }, | |
{ DicomTag.SOPClassUID, DicomUID.EncapsulatedPDFStorage }, | |
{ DicomTag.SOPInstanceUID, generator.Generate() }, | |
{ DicomTag.StudyDate, study.DateTime.Date }, | |
{ DicomTag.ContentDate, DateTime.Now }, | |
{ DicomTag.AcquisitionDateTime, DateTime.Now }, | |
{ DicomTag.StudyTime, study.DateTime }, | |
{ DicomTag.ContentTime, DateTime.Now }, | |
{ DicomTag.AccessionNumber, study.AccessionNumber.ToString( CultureInfo.InvariantCulture ) }, | |
{ DicomTag.Modality, "DOC" }, | |
{ DicomTag.ConversionType, "WSD" }, | |
{ DicomTag.ImageLaterality, planning.PatientSide }, | |
{ DicomTag.Manufacturer, company }, | |
{ DicomTag.ManufacturerModelName, product }, | |
{ DicomTag.ReferringPhysicianName, (string)null }, | |
{ DicomTag.PatientID, patient.ID }, | |
{ DicomTag.PatientBirthDate, patient.BirthDate }, | |
{ DicomTag.PatientSex, patient.Sex }, | |
{ DicomTag.StudyInstanceUID, study.InstanceUID }, | |
{ DicomTag.StudyDescription, study.Description }, | |
{ DicomTag.SeriesInstanceUID, generator.Generate( studyUID ) }, | |
{ DicomTag.SeriesDescription, $"{product} {planning.Description}" }, | |
{ DicomTag.PerformingPhysicianName, Environment.UserName }, | |
{ DicomTag.SeriesDate, DateTime.Now }, | |
{ DicomTag.SeriesTime, DateTime.Now }, | |
{ DicomTag.StudyID, study.ID }, | |
{ DicomTag.SeriesNumber, planning.Series.OrderBy( s => s.Number ).Last().Number + 1 }, | |
{ DicomTag.InstanceNumber, 1 }, | |
{ DicomTag.BurnedInAnnotation, "YES" }, | |
{ DicomTag.DocumentTitle, $"{product} Generated Document" }, | |
{ DicomTag.VerificationFlag, "UNVERIFIED" }, | |
{ DicomTag.MIMETypeOfEncapsulatedDocument, "application/pdf" }, | |
name, | |
sourceInstances, | |
conceptName, | |
{ DicomTag.EncapsulatedDocument, pdf } | |
}; | |
dataset.Add( DicomTag.InstitutionName, institution.Name ); | |
dataset.Add( DicomTag.InstitutionAddress, institution.Address ); | |
dataset.Add( DicomTag.InstitutionalDepartmentName, institution.Department ); | |
var dicomFile = new DicomFile( dataset ); | |
using ( var file = new FileStream( Path.Combine( directory, filename ), FileMode.Create ) ) | |
{ | |
dicomFile.Save( file ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Association Abort [source: ServiceProvider; reason: InvalidPDUParameter] I get an error, what could be the cause? I get this error when sending to pacs server.