Как перебрать CGPDFDictionary с помощью Monotouch?
Я использую этот код для получения содержимого 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 ответ
Похоже, что MonoTouch (и MonoMac, так как это общий код), также отсутствует привязка для CGPDFDictionaryApplyFunction. Без этого вам нужно знать значения ключей, которые есть в словаре.
Это хорошо работает, если вы ищете что-то конкретное (например, общеизвестное значение ключа), но не если вы хотите просмотреть / показать все, что существует внутри экземпляра словаря.
Я постараюсь добавить эту привязку в 'maccore' (потребляемую как MonoMac, так и MonoTouch) и обновлю эту запись привязкой, чтобы ее можно было использовать внутри приложения (пока не будут доступны фиксированные версии).