Как перебрать CGPDFDictionary с помощью Monotouch? - PullRequest
2 голосов
/ 31 августа 2011

Я использую этот код для получения содержимого 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
    }    
}

Смотрите также: Что является эквивалентом CGPDFDocumentGetCatalog в Monotouch?

1 Ответ

0 голосов
/ 31 августа 2011

Похоже, что в MonoTouch (и MonoMac, поскольку это общий код) отсутствует привязка для CGPDFDictionaryApplyFunction .Без него вам нужно знать значения key , которые есть в словаре.

Это хорошо работает, если вы ищете что-то конкретное (например, общеизвестное значение ключа), но не хотите, если вы хотите просмотреть / показать все, что существует внутри экземпляра словаря.

IЯ попытаюсь добавить эту привязку в 'maccore' (используется как MonoMac, так и MonoTouch) и обновит эту запись привязкой, чтобы ее можно было использовать внутри приложения (пока не будут доступны фиксированные версии).

...