Skip to content

Redaction

Redaction annotations permanently remove or obscure sensitive PDF content. Unlike other annotations, redaction has mark and apply phases: marking previews the effect; apply permanently removes content under the marked areas.

Important

After apply, content under redacted areas is permanently removed and cannot be recovered. Back up the document before applying.

Workflow

  1. Create — Add Redact annotation over target area
  2. Configure — Overlay color, text, etc.
  3. Preview — Original content remains until apply
  4. Apply — Permanently remove content; annotations are removed

Core methods

MethodDescription
getQuadPoints / setQuadPoints:Redaction region (precise text areas)
getFillColor / setFillColor:Mark-phase fill (preview)
getApplyFillColor / setApplyFillColor:Fill after apply
getOverlayText / setOverlayText:Overlay text after apply
isOverlayTextRepeated / enableRepeatOverlayText:Repeat overlay text
getOverlayTextAlignment / setOverlayTextAlignment:Overlay alignment
getDefaultAppearance / setDefaultAppearance:Overlay font appearance
enableAutoFontSizeAuto-fit overlay font size
applyApply redaction — permanent removal

Example: create and apply

objc
#import <FoxitRDK/FSPDFObjC.h>

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

FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:700 right1:350 top1:720];
FSAnnot *annot = [page addAnnot:FSAnnotRedact rect:rect];
FSRedact *redact = [[FSRedact alloc] initWithAnnot:annot];

[redact setFillColor:0xFFFF0000];
[redact setApplyFillColor:0xFF000000];

[redact setOverlayText:@"已脱敏"];
[redact setOverlayTextAlignment:1];

FSDefaultAppearance *da = [[FSDefaultAppearance alloc] init];
[da setText_size:12];
[da setText_color:0xFFFFFFFF];
[redact setDefaultAppearance:da];

[redact resetAppearanceStream];

[doc saveAs:@"path/to/preview.pdf" saveFlags:FSPDFDocSaveFlagNormal];

[redact apply];
[doc saveAs:@"path/to/redacted.pdf" saveFlags:FSPDFDocSaveFlagNormal];

Example: precise text redaction

Combine text search with QuadPoints:

objc
#import <FoxitRDK/FSPDFObjC.h>

FSTextSearch *textSearch = [[FSTextSearch alloc] initWithDocument:doc cancel_callback:nil];
[textSearch setPattern:@"机密信息"];

if ([textSearch findNext]) {
    FSRectFArray *rects = [textSearch getMatchRects];

    FSQuadPointsArray *quadPointsArray = [[FSQuadPointsArray alloc] init];
    for (int i = 0; i < [rects getSize]; i++) {
        FSRectF *r = [rects getAt:i];
        FSQuadPoints *qp = [[FSQuadPoints alloc] init];
        FSPointF *first = [[FSPointF alloc] init];
        [first set:[r getLeft] y:[r getTop]];
        FSPointF *second = [[FSPointF alloc] init];
        [second set:[r getRight] y:[r getTop]];
        FSPointF *third = [[FSPointF alloc] init];
        [third set:[r getLeft] y:[r getBottom]];
        FSPointF *fourth = [[FSPointF alloc] init];
        [fourth set:[r getRight] y:[r 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:FSAnnotRedact rect:emptyRect];
    FSRedact *redact = [[FSRedact alloc] initWithAnnot:annot];
    [redact setQuadPoints:quadPointsArray];
    [redact setApplyFillColor:0xFF000000];
    [redact resetAppearanceStream];

    [redact apply];
}