Skip to content

Text extraction

Foxit PDF SDK for iOS provides text extraction, selection, search, and retrieval via Core SDK. Page text is organized in FSTextPage, one per page.

FSTextPage is also used for:

  • Text search — construct FSTextSearch from FSTextPage.
  • Hyperlinks — construct FSPageTextLinks from FSTextPage.
  • Selection highlights — compute text regions from selection start/end.

Example: extract all page text

objc
#import <FoxitRDK/FSPDFObjC.h>

FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];

FSPDFPage *page = [doc getPage:0];
[page startParse:FSPDFPageParsePageNormal pause:nil is_reparse:YES];

FSTextPage *textPage = [[FSTextPage alloc] initWithPage:page flags:FSTextPageParseTextNormal];
NSString *fullText = [textPage getChars:0 count:-1];
NSLog(@"页面文本: %@", fullText);

Example: text rects from selection

Compute text regions from selection endpoints for highlight or range markup:

objc
- (NSArray<NSValue *> *)getTextRectsBySelectionOnPage:(FSPDFPage *)page
                                             startPos:(FSPointF *)startPos
                                               endPos:(FSPointF *)endPos {
    FSTextPage *textPage = [[FSTextPage alloc] initWithPage:page
                                                      flags:FSTextPageParseTextNormal];
    if (!textPage) return nil;

    int startIndex = [textPage getIndexAtPos:[startPos getX] y:[startPos getY] tolerance:5];
    int endIndex = [textPage getIndexAtPos:[endPos getX] y:[endPos getY] tolerance:5];

    if (startIndex > endIndex) {
        int temp = startIndex;
        startIndex = endIndex;
        endIndex = temp;
    }

    int count = [textPage getTextRectCount:startIndex count:endIndex - startIndex];
    if (count <= 0) return nil;

    NSMutableArray *rects = [NSMutableArray array];
    for (int i = 0; i < count; i++) {
        FSRectF *rect = [textPage getTextRect:i];
        if (rect) {
            // PDF coordinates; convert to device coordinates before display
            [rects addObject:[NSValue valueWithCGRect:CGRectMake(
                [rect getLeft], [rect getTop],
                [rect getRight] - [rect getLeft],
                [rect getTop] - [rect getBottom])]];
        }
    }
    return rects;
}

API reference

See the API reference for FSTextPage.