Text markup annotations
Text markup annotations visually mark existing PDF text. Foxit PDF SDK for iOS provides highlight, underline, strikethrough, and squiggly via FSTextMarkup and subtypes.
| Type | Constant | Description |
|---|---|---|
| Highlight | FSAnnotHighlight | Semi-transparent overlay |
| Underline | FSAnnotUnderline | Underline |
| Strikethrough | FSAnnotStrikeOut | Strikethrough |
| Squiggly | FSAnnotSquiggly | Squiggly underline |
QuadPoints
Text markup positioning uses QuadPoints (four corners per region). Multiple quads form FSQuadPointsArray for multi-line or multi-region text.
first ──────── second
│ │
third ──────── fourthfirst— top-leftsecond— top-rightthird— bottom-leftfourth— bottom-right
You can create with an empty rect (0, 0, 0, 0); the annot rect is computed from QuadPoints.
Example: highlight from search results
objc
#import <FoxitRDK/FSPDFObjC.h>
FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];
FSPDFPage *page = [doc getPage:0];
FSTextSearch *textSearch = [[FSTextSearch alloc] initWithDocument:doc cancel_callback:nil];
[textSearch setPattern:@"foxit"];
if ([textSearch findNext]) {
FSRectFArray *rects = [textSearch getMatchRects];
FSQuadPointsArray *quadPointsArray = [[FSQuadPointsArray alloc] init];
for (int i = 0; i < [rects getSize]; i++) {
FSRectF *rect = [rects getAt:i];
FSQuadPoints *qp = [[FSQuadPoints alloc] init];
FSPointF *first = [[FSPointF alloc] init];
[first set:[rect getLeft] y:[rect getTop]];
FSPointF *second = [[FSPointF alloc] init];
[second set:[rect getRight] y:[rect getTop]];
FSPointF *third = [[FSPointF alloc] init];
[third set:[rect getLeft] y:[rect getBottom]];
FSPointF *fourth = [[FSPointF alloc] init];
[fourth set:[rect getRight] y:[rect getBottom]];
[qp setFirst:first];
[qp setSecond:second];
[qp setThird:third];
[qp setFourth:fourth];
[quadPointsArray add:qp];
}
FSRectF *emptyRect = [[FSRectF alloc] initWithLeft1:0 bottom1:0 right1:0 top1:0];
FSAnnot *annot = [page addAnnot:FSAnnotHighlight rect:emptyRect];
FSTextMarkup *highlight = [[FSTextMarkup alloc] initWithAnnot:annot];
[highlight setQuadPoints:quadPointsArray];
[highlight setBorderColor:0xFFFF0000];
[highlight setOpacity:0.3f];
[highlight resetAppearanceStream];
}
[doc saveAs:@"path/to/output.pdf" saveFlags:FSPDFDocSaveFlagNormal];Example: underline with known coordinates
objc
FSPDFPage *page = [doc getPage:0];
FSQuadPoints *qp = [[FSQuadPoints alloc] init];
FSPointF *first = [[FSPointF alloc] init];
[first set:72 y:750];
FSPointF *second = [[FSPointF alloc] init];
[second set:300 y:750];
FSPointF *third = [[FSPointF alloc] init];
[third set:72 y:730];
FSPointF *fourth = [[FSPointF alloc] init];
[fourth set:300 y:730];
[qp setFirst:first];
[qp setSecond:second];
[qp setThird:third];
[qp setFourth:fourth];
FSQuadPointsArray *quadPointsArray = [[FSQuadPointsArray alloc] init];
[quadPointsArray add:qp];
FSRectF *emptyRect = [[FSRectF alloc] initWithLeft1:0 bottom1:0 right1:0 top1:0];
FSAnnot *annot = [page addAnnot:FSAnnotUnderline rect:emptyRect];
FSTextMarkup *underline = [[FSTextMarkup alloc] initWithAnnot:annot];
[underline setQuadPoints:quadPointsArray];
[underline setBorderColor:0xFF00AA00];
[underline resetAppearanceStream];Tip
Use FSAnnotStrikeOut or FSAnnotSquiggly instead of FSAnnotUnderline; the rest of the code is the same.
Common properties
| Method | Description |
|---|---|
getQuadPoints / setQuadPoints: | Quad array |
setBorderColor: | Mark color |
setOpacity: | Opacity (0.0–1.0) |
setContent: | Comment text in panel |
setTitle: | Author / title |
resetAppearanceStream | Update appearance |