मैंने अपना कामकाज पूरा कर लिया है। मैं अभी भी जानना चाहूंगा कि ऐसा करने का कोई बेहतर तरीका है, इसलिए यदि आप एक के बारे में जानते हैं या कोई सुझाव है तो मैं उन्हें आज़माने के लिए तैयार हूं।
नोट्स: मैं केवल बूल, स्याही, तार और सरणी की जांच करता हूं क्योंकि ऐप्पल के दस्तावेज के मुताबिक पीडीएफ में सहायक जानकारी में होना चाहिए। सरणी बिट अनचाहे है, क्योंकि मेरे पास Aux जानकारी में एक सरणी वाला पीडीएफ नहीं है। अगर कोई मेरे लिए यह जांचना चाहेगा या पीडीएफ से लिंक करेगा तो मैं खुशी से इसका परीक्षण करूंगा।
सबसे पहले, कक्षा शीर्षलेख में @interface
टैग के बाहर बनाएँ ताकि CGPDFDictionaryApplyFunction
द्वारा सी सी फ़ंक्शंस वर्तमान कक्षा तक पहुंच सकें। जानकारी संग्रहीत करने के लिए NSDictionary *auxInfo
भी जोड़ें। एक बार निकाले, एन एस प्रकार आसानी से इस तरह ढाला जा सकता है:
CFDictionaryRef newDictionary = (CFDictionaryRef)[self auxInfo];
मैं वास्तव में कल रात किया गया था लेकिन सोचा था कि मैं एन एस से सीएफ में बदलने के लिए पाशन के दूसरे दौर नहीं था, भूल वे टोकन मुक्त पाटने थे । तो वहां आपके पास है, आशा है कि हर किसी को मेरे श्रमिकों से लाभ होगा। यदि आपको स्पष्टीकरण की आवश्यकता है तो प्रश्न पूछें। और एक बार फिर, अगर ऐसा करने का कोई आसान तरीका है, तो मेरे कोड का केवल एक अनुकूलन, कृपया ऐसा कहें। मुझे पता है कि यह करने के लिए यह एक बहुत ही सुरुचिपूर्ण तरीका नहीं है लेकिन यह अभी के लिए काम करता है।
- (void)extractPDFDictionary:(CGPDFDocumentRef)pdf{
NSLog(@"extractingPDFDictionary");
CGPDFDictionaryRef oldDict = CGPDFDocumentGetInfo(pdf);
CGPDFDictionaryApplyFunction(oldDict, copyDictionaryValues, NULL);
}
void copyDictionaryValues (const char *key, CGPDFObjectRef object, void *info) {
NSLog(@"key: %s", key);
CGPDFObjectType type = CGPDFObjectGetType(object);
switch (type) {
case kCGPDFObjectTypeString: {
CGPDFStringRef objectString;
if (CGPDFObjectGetValue(object, kCGPDFObjectTypeString, &objectString)) {
NSString *tempStr = (NSString *)CGPDFStringCopyTextString(objectString);
[[selfClass auxInfo] setObject:tempStr
forKey:[NSString stringWithCString:key encoding:NSUTF8StringEncoding]];
[tempStr release];
NSLog(@"set string value");
}
}
case kCGPDFObjectTypeInteger: {
CGPDFInteger objectInteger;
if (CGPDFObjectGetValue(object, kCGPDFObjectTypeInteger, &objectInteger)) {
[[selfClass auxInfo] setObject:[NSNumber numberWithInt:objectInteger]
forKey:[NSString stringWithCString:key encoding:NSUTF8StringEncoding]];
NSLog(@"set int value");
}
}
case kCGPDFObjectTypeBoolean: {
CGPDFBoolean objectBool;
if (CGPDFObjectGetValue(object, kCGPDFObjectTypeBoolean, &objectBool)) {
[[selfClass auxInfo] setObject:[NSNumber numberWithBool:objectBool]
forKey:[NSString stringWithCString:key encoding:NSUTF8StringEncoding]];
NSLog(@"set boolean value");
}
}
case kCGPDFObjectTypeArray : {
CGPDFArrayRef objectArray;
if (CGPDFObjectGetValue(object, kCGPDFObjectTypeArray, &objectArray)) {
NSArray *tempArr = [selfClass copyPDFArray:objectArray];
[[selfClass auxInfo] setObject:tempArr
forKey:[NSString stringWithCString:key encoding:NSUTF8StringEncoding]];
[tempArr release];
NSLog(@"set array value");
}
}
}
}
- (NSArray *)copyPDFArray:(CGPDFArrayRef)arr{
int i = 0;
NSMutableArray *temp = [[NSMutableArray alloc] init];
for(i=0; i<CGPDFArrayGetCount(arr); i++){
CGPDFObjectRef object;
CGPDFArrayGetObject(arr, i, &object);
CGPDFObjectType type = CGPDFObjectGetType(object);
switch(type){
case kCGPDFObjectTypeString: {
CGPDFStringRef objectString;
if (CGPDFObjectGetValue(object, kCGPDFObjectTypeString, &objectString)) {
NSString *tempStr = (NSString *)CGPDFStringCopyTextString(objectString);
[temp addObject:tempStr];
[tempStr release];
}
}
case kCGPDFObjectTypeInteger: {
CGPDFInteger objectInteger;
if (CGPDFObjectGetValue(object, kCGPDFObjectTypeInteger, &objectInteger)) {
[temp addObject:[NSNumber numberWithInt:objectInteger]];
}
}
case kCGPDFObjectTypeBoolean: {
CGPDFBoolean objectBool;
if (CGPDFObjectGetValue(object, kCGPDFObjectTypeBoolean, &objectBool)) {
[temp addObject:[NSNumber numberWithBool:objectBool]];
}
}
case kCGPDFObjectTypeArray : {
CGPDFArrayRef objectArray;
if (CGPDFObjectGetValue(object, kCGPDFObjectTypeArray, &objectArray)) {
NSArray *tempArr = [selfClass copyPDFArray:objectArray];
[temp addObject:tempArr];
[tempArr release];
}
}
}
}
return temp;
}
मैं आज भी इस समस्या में भाग गया। अभी भी एक समाधान पर काम कर रहे हैं। यह जांच करेगा और अगर मुझे कुछ मिल जाए तो पोस्ट भी करेगा। –
धन्यवाद। जब मैं समाप्त हो जाता हूं तो मैं अपना कामकाज पोस्ट करूंगा। मैं वास्तव में इसे नफरत करता हूं क्योंकि यह अविश्वसनीय रूप से अक्षम है। एसडीके में अंतर्निहित विधि के बिना शायद उतना ही अच्छा होगा, लेकिन इसकी बदसूरत। – alunsford3
हाँ यह बुरा लग रहा है। मैं व्यक्तिगत रूप से पीडीएफ ऑब्जेक्ट को पीडीएफएआरई या पीडीएफ डिक्शनरी में जोड़ने की कोशिश कर रहा हूं, और एक सीडीपीडीएफ ऑब्जेक्ट के लिए किसी ऐड को एक्सेस या बनाने या संपादित करने या डालने में सक्षम नहीं होने की एक ही समस्या में भाग लेता हूं। यह वास्तव में एक मजाक है कि एपीआई कितनी खराब है। –