Michel Melhem
Michel Melhem

Reputation: 681

How to add anotation to my pdf using objective c?

I'm fairly new to objective c and Apple's PdfKit framework and i'm unable to draw anotations on top of my pdf.

I get no errors on the console. This is my code :

PDFAnnotation  * observation = [[PDFAnnotation alloc] init];
CGRect cgRect = CGRectMake(20, 20, 120, 120);
                
observation.widgetFieldType = PDFAnnotationWidgetSubtypeButton;
observation.bounds = cgRect;
observation.shouldDisplay = true;
observation.backgroundColor = UIColor.redColor;
observation.widgetFieldType= PDFAnnotationWidgetSubtypeButton;
                
[page addAnnotation:observation];

Does someone know why my pdfanotation is not drawn on my pdf ? I'm also wondering if the PdfKit framework is fully supported on objective c as the apple's documentation for it just has examples that are made using swift.

Thank you for your help !

Upvotes: 0

Views: 401

Answers (1)

zrzka
zrzka

Reputation: 21219

Your annotation is not drawn because you forgot to set the type. It's probably a mistake, because you're setting widgetFieldType twice. Here's the correct button widget setup:

PDFAnnotation  *observation = [[PDFAnnotation alloc] init];
observation.bounds = CGRectMake(20, 20, 200, 100);

observation.type = PDFAnnotationSubtypeWidget;
observation.widgetFieldType = PDFAnnotationWidgetSubtypeButton;
observation.widgetControlType = kPDFWidgetCheckBoxControl;

observation.backgroundColor = UIColor.redColor;
[page addAnnotation:observation];

To avoid future mistakes like this one, use the following initializer:

- (instancetype)initWithBounds:(CGRect)bounds 
                       forType:(PDFAnnotationSubtype)annotationType 
                withProperties:(NSDictionary *)properties;

And change the setup code to:

PDFAnnotation  *observation = [[PDFAnnotation alloc] initWithBounds:CGRectMake(20, 20, 200, 100)
                                                            forType:PDFAnnotationSubtypeWidget
                                                     withProperties:nil];
observation.widgetFieldType = PDFAnnotationWidgetSubtypeButton;
observation.widgetControlType = kPDFWidgetCheckBoxControl;
observation.backgroundColor = UIColor.redColor;
    
[page addAnnotation:observation];

I'd highly recommend to setup appearance (like backgroundColor) as the last thing. Because all these values are modified by PDFKit when you change the type.

Also be aware that 0, 0 is bottom/left corner (bounds).

Upvotes: 1

Related Questions