Knowledge Base and examples

Knowledge Base - Annotation Properties (iOS)

If you have a premium license, you can use the advanced properties to get some informations about the annotation, like the creation date, modification date...etc.

To use the advanced properties, you can create a class to manage the annotation like the following, and call checkAnnotAdvancedProp:

Header file:

#import <Foundation/Foundation.h>

#import "PDFObjc.h"

 

@interface RDAdvancedProperties : NSObject

 

@property (strong, nonatomic) PDFDoc *doc;

 

- (NSString *)getTypeName:(int)type;

- (void)checkAnnotAdvancedProp:(PDFAnnot *)annot;

- (void)handleRef:(PDF_OBJ_REF)ref;

- (void)handleDictionary:(PDFObj *)obj;

 

@end

 

Source file:

#import "RDAdvancedProperties.h"

 

@implementation RDAdvancedProperties {

    NSArray *types;

}

 

- (instancetype)init

{

    self = [super init];

    if (self) {

        //define advanced properties types

        types = @[@"null", @"boolean", @"int", @"real", @"string", @"name", @"array", @"dictionary", @"reference", @"stream"];

    }

    return self;

}

- (NSString *)getTypeName:(int)type

{

    if (type >= 0 && type < types.count) {

        return [types objectAtIndex:type];

    }

    

    return @"unknown";

}

- (void)checkAnnotAdvancedProp:(PDFAnnot *)annot

{

    if (annot == nil) {

        return;

    }

 

    [self handleRef:[annot advanceGetRef]];

}

 

- (void)handleRef:(PDF_OBJ_REF)ref

{

    if (ref) {

        PDFObj *obj = [_doc advanceGetObj:ref];

        [self handleDictionary:obj];

   

}

- (void)handleDictionary:(PDFObj *)obj

{

    int count = obj.dictGetItemCount;

 

    for (int cur = 0; cur < count; cur++) {

        NSString *tag = [obj dictGetItemTag:cur];

        PDFObj *item = [obj dictGetItemByIndex:cur];

        int type = item.getType;

        NSString *typeName = [self getTypeName:type];

        

        NSLog(@"--ADV-- tag: %i --- %@:%@ ->", cur, tag, typeName);

        switch (type) {

            case 1: //boolean

                NSLog(@"--ADV-- value = %i", item.getBoolVal);

                break;

            case 2: //int

                NSLog(@"--ADV-- value = %i", item.getIntVal);

                break;

            case 3: //float

                NSLog(@"--ADV-- value = %f", item.getRealVal);

                break;

            case 4: //string

                NSLog(@"--ADV-- value = %@", item.getTextStringVal);

                break;

            case 5: //name

                NSLog(@"--ADV-- value = %@", item.getNameVal);

                break;

            case 6: //array

            {

                int arrayCount = item.arrayGetItemCount;

                for (int k = 0; k < arrayCount; k++) {

                    PDFObj *array_obj = [item arrayGetItem:k];

                    NSLog(@"--ADV-- array item %i: value = %f", k, array_obj.getRealVal);

                }

            

                break;

            }

            case 7: //dictionary

                [self handleDictionary:item];

                break;

            default:

                break;

        }

    }

}

 

@end



To use the RDAdvancedProperties class in your PDFView instance, you can do the following:
 

    RDAdvancedProperties *adv = [RDAdvancedProperties new];

    adv.doc = m_doc;

    

    [adv checkAnnotAdvancedProp:m_annot];

Applies To

RadaeePDF SDK for iOS

Related Articles

Annotation Properties

Details

Created : 2016-11-28 16:22:46, Last Modified : 2016-11-28 16:23:25