2

このコードを使用して 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
    }    
}

参照: Monotouch の CGPDFDocumentGetCatalog に相当するものは何ですか?

4

1 に答える 1

0

MonoTouch (およびこれは共有コードであるため、MonoMac) にもCGPDFDictionaryApplyFunctionのバインディングが欠落しているようです。それがなければ、辞書にあるキー値を知る必要があります。

特定のもの (つまり、既知のキー値) を探している場合はうまく機能しますが、辞書インスタンス内に存在するすべてのものを検査/表示したい場合はそうではありません。

このバインディングを 'maccore' (MonoMac と MonoTouch の両方で使用) に追加し、このエントリをバインディングで更新して、アプリケーション内で使用できるようにします (修正バージョンが利用可能になるまで)。

于 2011-08-31T18:31:04.657 に答える