Shapes and drawing
This guide covers Line, Square, Circle, Polygon, PolyLine, and Ink annotations.
Line annotations
Lines run from start to end with optional endpoint styles (arrows, etc.).
Endpoint styles
Set via FSMarkup constants:
| Constant | Value | Description |
|---|---|---|
FSMarkupEndingStyleNone | 0 | None |
FSMarkupEndingStyleSquare | 1 | Square |
FSMarkupEndingStyleCircle | 2 | Circle |
FSMarkupEndingStyleDiamond | 3 | Diamond |
FSMarkupEndingStyleOpenArrow | 4 | Open arrow |
FSMarkupEndingStyleClosedArrow | 5 | Closed arrow |
FSMarkupEndingStyleButt | 6 | Butt |
FSMarkupEndingStyleROpenArrow | 7 | Reverse open arrow |
FSMarkupEndingStyleRClosedArrow | 8 | Reverse closed arrow |
FSMarkupEndingStyleSlash | 9 | Slash |
Core methods
| Method | Description |
|---|---|
getStartPoint / setStartPoint: | Start point |
getEndPoint / setEndPoint: | End point |
getLineStartStyle / setLineStartStyle: | Start style |
getLineEndStyle / setLineEndStyle: | End style |
getStyleFillColor / setStyleFillColor: | Endpoint fill |
hasCaption / enableCaption: | Caption |
getCaptionOffset / setCaptionOffset: | Caption offset |
Example: line with arrow
objc
#import <FoxitRDK/FSPDFObjC.h>
FSPDFPage *page = [doc getPage:0];
FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:300 right1:400 top1:350];
FSAnnot *annot = [page addAnnot:FSAnnotLine rect:rect];
FSLine *line = [[FSLine alloc] initWithAnnot:annot];
FSPointF *startPt = [[FSPointF alloc] init];
[startPt set:100 y:325];
FSPointF *endPt = [[FSPointF alloc] init];
[endPt set:400 y:325];
[line setStartPoint:startPt];
[line setEndPoint:endPt];
[line setLineStartStyle:FSMarkupEndingStyleNone];
[line setLineEndStyle:FSMarkupEndingStyleClosedArrow];
[line setBorderColor:0xFFFF0000];
[line setContent:@"Watch out this section"];
[line resetAppearanceStream];Square and circle
Both support border and fill colors.
Example: square
objc
FSPDFPage *page = [doc getPage:0];
FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:600 right1:300 top1:700];
FSAnnot *annot = [page addAnnot:FSAnnotSquare rect:rect];
FSSquare *square = [[FSSquare alloc] initWithAnnot:annot];
[square setBorderColor:0xFF0000FF];
[square setFillColor:0x330000FF];
[square setOpacity:0.8f];
[square setContent:@"marked section"];
[square resetAppearanceStream];Example: circle
objc
FSPDFPage *page = [doc getPage:0];
FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:400 right1:250 top1:500];
FSAnnot *annot = [page addAnnot:FSAnnotCircle rect:rect];
FSCircle *circle = [[FSCircle alloc] initWithAnnot:annot];
[circle setBorderColor:0xFFFF6600];
[circle setFillColor:0x22FF6600];
[circle setContent:@"Key Content"];
[circle resetAppearanceStream];Polygon and polyline
Vertices define the shape; polygons close; polylines stay open.
Example: polygon
objc
FSPDFPage *page = [doc getPage:0];
FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:200 right1:300 top1:350];
FSAnnot *annot = [page addAnnot:FSAnnotPolygon rect:rect];
FSMarkup *polygon = [[FSMarkup alloc] initWithAnnot:annot];
FSPointFArray *vertices = [[FSPointFArray alloc] init];
FSPointF *p1 = [[FSPointF alloc] init]; [p1 set:150 y:200];
FSPointF *p2 = [[FSPointF alloc] init]; [p2 set:300 y:250];
FSPointF *p3 = [[FSPointF alloc] init]; [p3 set:280 y:350];
FSPointF *p4 = [[FSPointF alloc] init]; [p4 set:120 y:330];
[vertices add:p1];
[vertices add:p2];
[vertices add:p3];
[vertices add:p4];
[polygon setVertexes:vertices];
[polygon setBorderColor:0xFF009900];
[polygon resetAppearanceStream];Ink annotations
Ink stores freehand strokes via FSPath.
FSPath
| Method | Description |
|---|---|
moveTo: | Start stroke |
lineTo: | Line to point |
cubicBezierTo:point2:point3: | Cubic Bézier |
closeFigure | Close path |
getPointCount / getPoint: | Point access |
Example: ink
objc
#import <FoxitRDK/FSPDFObjC.h>
FSPDFPage *page = [doc getPage:0];
FSRectF *rect = [[FSRectF alloc] initWithLeft1:50 bottom1:100 right1:350 top1:300];
FSAnnot *annot = [page addAnnot:FSAnnotInk rect:rect];
FSInk *ink = [[FSInk alloc] initWithAnnot:annot];
FSPath *path = [[FSPath alloc] init];
FSPointF *pt1 = [[FSPointF alloc] init]; [pt1 set:60 y:150];
FSPointF *pt2 = [[FSPointF alloc] init]; [pt2 set:120 y:200];
FSPointF *pt3 = [[FSPointF alloc] init]; [pt3 set:200 y:160];
FSPointF *pt4 = [[FSPointF alloc] init]; [pt4 set:300 y:250];
[path moveTo:pt1];
[path lineTo:pt2];
[path lineTo:pt3];
[path lineTo:pt4];
[ink setInkList:path];
[ink setBorderColor:0xFF000000];
[ink setOpacity:0.9f];
[ink resetAppearanceStream];NOTE
Call [ink enableUseBezier:YES] for smoother strokes with Bézier curves.