如何使用Monotouch迭代CGPDFDictionary?

时间:2011-08-31 13:57:29

标签: c# .net mono xamarin.ios cgpdfdictionaryref

我正在使用此代码获取PDF的内容:

var oDoc = new CGPDFDocument.FromFile("./test.pdf");
var oCat = oDoc.GetCatalog();

但我怎么知道迭代目录?所有方法都需要“密钥”,但我不知道如何获取根密钥或密钥数组。

我发现在ObjC中会使用类似的东西:

CGPDFDictionaryApplyFunction(pdfDocDictionary, ListDictionaryObjects, NULL);

void ListDictionaryObjects (const char *key, CGPDFObjectRef object, void *info) {
    NSLog("key: %s", key);
    CGPDFObjectType type = CGPDFObjectGetType(object);
    switch (type) { 
        case kCGPDFObjectTypeDictionary: {
            CGPDFDictionaryRef objectDictionary;
            if (CGPDFObjectGetValue(object, kCGPDFObjectTypeDictionary, &objectDictionary)) {
                CGPDFDictionaryApplyFunction(objectDictionary, ListDictionaryObjects, NULL);
            }
        }
        case kCGPDFObjectTypeInteger: {
            CGPDFInteger objectInteger;
            if (CGPDFObjectGetValue(object, kCGPDFObjectTypeInteger, &objectInteger)) {
                NSLog("pdf integer value: %ld", (long int)objectInteger); 
            }
        }
        // test other object type cases here
        // cf. http://developer.apple.com/mac/library/documentation/GraphicsImaging/Reference/CGPDFObject/Reference/reference.html#//apple_ref/doc/uid/TP30001117-CH3g-SW1
    }    
}

另见: What is the equivalent of CGPDFDocumentGetCatalog in Monotouch?

1 个答案:

答案 0 :(得分:0)

看起来MonoTouch(和MonoMac,因为这是共享代码)也缺少CGPDFDictionaryApplyFunction的绑定。没有它,您需要知道字典中的值。

如果您正在寻找特定的东西(即众所周知的键值),那么效果很好,但如果您想检查/显示字典实例中存在的所有内容,则不行。

我希望将此绑定添加到'maccore'(由MonoMac和MonoTouch使用)中,并使用绑定更新此条目,以便在应用程序内部使用(直到修复版本可用)。