Skip to content

Commit

Permalink
1.8
Browse files Browse the repository at this point in the history
  • Loading branch information
rossetantoine committed Sep 4, 2013
1 parent 29a397a commit 8187874
Show file tree
Hide file tree
Showing 6 changed files with 153 additions and 131 deletions.
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,15 @@ DiscPublishing/Libs/*
DiscPublishing/DiscPublishing.xcodeproj/project.xcworkspace/xcuserdata/admin.xcuserdatad/UserInterfaceState.xcuserstate

DiscPublishing/DiscPublishing.xcodeproj/project.xcworkspace/xcuserdata/admin.xcuserdatad/UserInterfaceState.xcuserstate

PDF to DICOM/PDFToDicom.xcodeproj/project.xcworkspace/contents.xcworkspacedata

PDF to DICOM/PDFToDicom.xcodeproj/xcuserdata/admin.xcuserdatad/xcschemes/PDFToDICOM.xcscheme

PDF to DICOM/PDFToDicom.xcodeproj/xcuserdata/admin.xcuserdatad/xcschemes/xcschememanagement.plist

Reporter/Reporter.xcodeproj/xcuserdata/admin.xcuserdatad/xcschemes/Reporter.xcscheme

Reporter/Reporter.xcodeproj/xcuserdata/admin.xcuserdatad/xcschemes/ReporterPrefs.xcscheme

Reporter/Reporter.xcodeproj/xcuserdata/admin.xcuserdatad/xcschemes/xcschememanagement.plist
2 changes: 1 addition & 1 deletion PDF to DICOM/DCMPDFImportFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//

#import <Foundation/Foundation.h>
#import "OsiriXAPI/PluginFilter.h"
#import <OsiriXAPI/PluginFilter.h>

@class DCMCalendarDate;

Expand Down
247 changes: 129 additions & 118 deletions PDF to DICOM/DCMPDFImportFilter.m
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#import "OsiriXAPI/browserController.h"
#import "OsiriXAPI/DicomFile.h"
#import "OsiriXAPI/DicomDatabase.h"

@implementation DCMPDFImportFilter

Expand Down Expand Up @@ -47,8 +48,7 @@ - (long) filterImage:(NSString*) menuName
NSDirectoryEnumerator *dirEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:fpath];
NSString *path;
while (path = [dirEnumerator nextObject])
if ([[NSImage imageFileTypes] containsObject:[path pathExtension]]
|| [[NSImage imageFileTypes] containsObject:NSFileTypeForHFSTypeCode([[[[NSFileManager defaultManager] fileSystemAttributesAtPath:path] objectForKey:NSFileHFSTypeCode] longValue])])
if ([[NSImage imageFileTypes] containsObject:[path pathExtension]])
[self convertImageToDICOM:[fpath stringByAppendingPathComponent:path] source: source];
}
else
Expand All @@ -65,122 +65,133 @@ - (long) filterImage:(NSString*) menuName

- (void)convertImageToDICOM:(NSString *)path source:(NSString *) source
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSMutableData *pdf = nil;
if ([[path pathExtension] isEqualToString:@"pdf"])
pdf = [NSMutableData dataWithContentsOfFile:path];

//if we have an image get the info we need from the imageRep.
if( pdf)
{
id patientName = nil, patientID = nil, studyDescription = nil, studyUID = nil, studyID = nil, studyDate = nil;
id studyTime = nil, seriesDate = nil, seriesTime = nil, acquisitionDate = nil, acquisitionTime = nil;
id contentDate = nil, contentTime = nil, charSet = nil, patientSex = nil, accessionNumber = nil, patientsBirthDate = nil, referringPhysiciansName = nil;

if ([DicomFile isDICOMFile: source])
{
DCMObject *dcmObject = [DCMObject objectWithContentsOfFile: source decodingPixelData:NO];

patientName = [dcmObject attributeValueWithName:@"PatientsName"];
patientID = [dcmObject attributeValueWithName:@"PatientID"];
studyDescription = [dcmObject attributeValueWithName:@"StudyDescription"];
studyUID = [dcmObject attributeValueWithName:@"StudyInstanceUID"];
studyID = [dcmObject attributeValueWithName:@"StudyID"];
studyDate = [dcmObject attributeValueWithName:@"StudyDate"];
studyTime = [dcmObject attributeValueWithName:@"StudyTime"];
seriesDate = [dcmObject attributeValueWithName:@"SeriesDate"];
seriesTime = [dcmObject attributeValueWithName:@"SeriesTime"];
acquisitionDate = [dcmObject attributeValueWithName:@"AcquisitionDate"];
acquisitionTime = [dcmObject attributeValueWithName:@"AcquisitionTime"];
contentDate = [dcmObject attributeValueWithName:@"ContentDate"];
contentTime = [dcmObject attributeValueWithName:@"ContentTime"];
charSet = [dcmObject attributeValueWithName:@"SpecificCharacterSet"];
patientSex = [dcmObject attributeValueWithName:@"PatientsSex"];
accessionNumber = [dcmObject attributeValueWithName:@"AccessionNumber"];
patientsBirthDate = [dcmObject attributeValueWithName:@"PatientsBirthDate"];

referringPhysiciansName = [dcmObject attributeValueWithName:@"ReferringPhysiciansName"];
}

// pad data
if ([pdf length] % 2 != 0)
[pdf increaseLengthBy:1];
// create DICOM OBJECT
DCMObject *dcmObject = [DCMObject encapsulatedPDF:pdf];

if( charSet)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: charSet] forName:@"SpecificCharacterSet"];

[dcmObject setAttributeValues:[NSArray arrayWithObject: studyUID] forName:@"StudyInstanceUID"];
[dcmObject setAttributeValues:[NSArray arrayWithObject: [[path lastPathComponent] stringByDeletingPathExtension]] forName:@"SeriesDescription"];

if (patientName)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: patientName] forName:@"PatientsName"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: @""] forName:@"PatientsName"];

if (patientID)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: patientID] forName:@"PatientID"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: @"0"] forName:@"PatientID"];

if (patientsBirthDate)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: patientsBirthDate] forName:@"PatientsBirthDate"];

if (accessionNumber)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: accessionNumber] forName:@"AccessionNumber"];

if( referringPhysiciansName)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: referringPhysiciansName] forName:@"ReferringPhysiciansName"];

if (patientSex)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: patientSex] forName:@"PatientsSex"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: @""] forName:@"PatientsSex"];

if (patientsBirthDate)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: patientsBirthDate] forName:@"PatientsBirthDate"];

[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: [[path lastPathComponent] stringByDeletingPathExtension]] forName:@"DocumentTitle"];

[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[NSString stringWithFormat:@"%d", imageNumber]] forName:@"InstanceNumber"];

if ( studyID)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[NSString stringWithFormat:@"%d", studyID]] forName:@"StudyID"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[NSString stringWithFormat:@"%d", 0001]] forName:@"StudyID"];

if (studyDate)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:studyDate] forName:@"StudyDate"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[DCMCalendarDate dicomDateWithDate:[NSDate date]]] forName:@"StudyDate"];

if (studyTime)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:studyTime] forName:@"StudyTime"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[DCMCalendarDate dicomTimeWithDate:[NSDate date]]] forName:@"StudyTime"];
@autoreleasepool
{
NSMutableData *pdf = nil;
if ([[path pathExtension] isEqualToString:@"pdf"])
pdf = [NSMutableData dataWithContentsOfFile:path];

//if we have an image get the info we need from the imageRep.
if( pdf)
{
id patientName = nil, patientID = nil, studyDescription = nil, studyUID = nil, studyID = nil, studyDate = nil;
id studyTime = nil, seriesDate = nil, seriesTime = nil, acquisitionDate = nil, acquisitionTime = nil;
id contentDate = nil, contentTime = nil, charSet = nil, patientSex = nil, accessionNumber = nil, patientsBirthDate = nil, referringPhysiciansName = nil, institutionName = nil;

if ([DicomFile isDICOMFile: source])
{
DCMObject *dcmObject = [DCMObject objectWithContentsOfFile: source decodingPixelData:NO];

patientName = [dcmObject attributeValueWithName:@"PatientsName"];
patientID = [dcmObject attributeValueWithName:@"PatientID"];
studyDescription = [dcmObject attributeValueWithName:@"StudyDescription"];
studyUID = [dcmObject attributeValueWithName:@"StudyInstanceUID"];
studyID = [dcmObject attributeValueWithName:@"StudyID"];
studyDate = [dcmObject attributeValueWithName:@"StudyDate"];
studyTime = [dcmObject attributeValueWithName:@"StudyTime"];
seriesDate = [dcmObject attributeValueWithName:@"SeriesDate"];
seriesTime = [dcmObject attributeValueWithName:@"SeriesTime"];
acquisitionDate = [dcmObject attributeValueWithName:@"AcquisitionDate"];
acquisitionTime = [dcmObject attributeValueWithName:@"AcquisitionTime"];
contentDate = [dcmObject attributeValueWithName:@"ContentDate"];
contentTime = [dcmObject attributeValueWithName:@"ContentTime"];
charSet = [dcmObject attributeValueWithName:@"SpecificCharacterSet"];
patientSex = [dcmObject attributeValueWithName:@"PatientsSex"];
accessionNumber = [dcmObject attributeValueWithName:@"AccessionNumber"];
patientsBirthDate = [dcmObject attributeValueWithName:@"PatientsBirthDate"];
institutionName = [dcmObject attributeValueWithName:@"InstitutionName"];

referringPhysiciansName = [dcmObject attributeValueWithName:@"ReferringPhysiciansName"];
}

// pad data
if ([pdf length] % 2 != 0)
[pdf increaseLengthBy:1];
// create DICOM OBJECT
DCMObject *dcmObject = [DCMObject encapsulatedPDF:pdf];

if( charSet)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: charSet] forName:@"SpecificCharacterSet"];

[dcmObject setAttributeValues:[NSArray arrayWithObject: studyUID] forName:@"StudyInstanceUID"];
[dcmObject setAttributeValues:[NSArray arrayWithObject: [[path lastPathComponent] stringByDeletingPathExtension]] forName:@"SeriesDescription"];

if (patientName)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: patientName] forName:@"PatientsName"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: @""] forName:@"PatientsName"];

if (patientID)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: patientID] forName:@"PatientID"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: @"0"] forName:@"PatientID"];

if (patientsBirthDate)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: patientsBirthDate] forName:@"PatientsBirthDate"];

if (accessionNumber)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: accessionNumber] forName:@"AccessionNumber"];

if( referringPhysiciansName)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: referringPhysiciansName] forName:@"ReferringPhysiciansName"];

if( institutionName)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: institutionName] forName:@"InstitutionName"];

if (patientSex)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: patientSex] forName:@"PatientsSex"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: @""] forName:@"PatientsSex"];

if (patientsBirthDate)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: patientsBirthDate] forName:@"PatientsBirthDate"];

[dcmObject setAttributeValues:[NSMutableArray arrayWithObject: [[path lastPathComponent] stringByDeletingPathExtension]] forName:@"DocumentTitle"];

[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[NSString stringWithFormat:@"%d", imageNumber]] forName:@"InstanceNumber"];

if ( studyID)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[NSString stringWithFormat:@"%d", (int) studyID]] forName:@"StudyID"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[NSString stringWithFormat:@"%d", 0001]] forName:@"StudyID"];

if (studyDate)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:studyDate] forName:@"StudyDate"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[DCMCalendarDate dicomDateWithDate:[NSDate date]]] forName:@"StudyDate"];

if (studyTime)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:studyTime] forName:@"StudyTime"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[DCMCalendarDate dicomTimeWithDate:[NSDate date]]] forName:@"StudyTime"];

if (seriesDate)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:seriesDate] forName:@"SeriesDate"];
else

[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[DCMCalendarDate dicomTimeWithDate:[NSDate date]]] forName:@"SeriesDate"];

if (seriesTime)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:seriesTime] forName:@"SeriesTime"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[DCMCalendarDate dicomTimeWithDate:[NSDate date]]] forName:@"SeriesTime"];

[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:@"9997"] forName:@"SeriesNumber"];

//get Incoming Folder Path;
NSString *destination = [NSString stringWithFormat: @"%@/INCOMING.noindex/PDF%d%d.dcm", [[BrowserController currentBrowser] documentsDirectory], studyID, imageNumber++];

if ([dcmObject writeToFile:destination withTransferSyntax:[DCMTransferSyntax ExplicitVRLittleEndianTransferSyntax] quality:DCMLosslessQuality atomically:YES])
NSLog(@"Wrote PDF to %@", destination);
}

[pool release];
if (seriesDate)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:seriesDate] forName:@"SeriesDate"];
else

[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[DCMCalendarDate dicomTimeWithDate:[NSDate date]]] forName:@"SeriesDate"];

if (seriesTime)
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:seriesTime] forName:@"SeriesTime"];
else
[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:[DCMCalendarDate dicomTimeWithDate:[NSDate date]]] forName:@"SeriesTime"];

[dcmObject setAttributeValues:[NSMutableArray arrayWithObject:@"9997"] forName:@"SeriesNumber"];

NSString *filePath = [BrowserController.currentBrowser.database uniquePathForNewDataFileWithExtension: @"dcm"];

if( [dcmObject writeToFile:filePath withTransferSyntax:[DCMTransferSyntax ExplicitVRLittleEndianTransferSyntax] quality:DCMLosslessQuality atomically:YES])
NSLog(@"Wrote PDF to %@", filePath);

if( [[NSFileManager defaultManager] fileExistsAtPath: filePath])
[BrowserController.currentBrowser.database addFilesAtPaths: [NSArray arrayWithObject: filePath]
postNotifications: YES
dicomOnly: YES
rereadExistingItems: YES
generatedByOsiriX: YES];


}
}
}
@end
Binary file modified PDF to DICOM/English.lproj/InfoPlist.strings
Binary file not shown.
2 changes: 1 addition & 1 deletion PDF to DICOM/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.7</string>
<string>1.8</string>
<key>MenuTitles</key>
<array>
<string>PDF to DICOM</string>
Expand Down
Loading

0 comments on commit 8187874

Please sign in to comment.