Skip to content

Redaction

Redact annotations permanently mask or remove sensitive PDF content. Unlike other annotations, redaction has two phases: mark (preview) and apply (permanent removal).

Important

After apply(), content in redacted regions is permanently removed and cannot be recovered. Back up the document before applying.

Workflow

  1. Create redact annotation — Add a Redact annotation over the target area
  2. Configure appearance — Overlay color, text, etc.
  3. Preview — Mark only; original content remains
  4. Apply — Permanently remove marked content; annotations are removed

Core Methods

MethodDescription
getQuadPoints() / setQuadPoints(QuadPointsArray)Redaction region (precise text areas)
getFillColor() / setFillColor(int)Mark-phase fill color (preview)
getApplyFillColor() / setApplyFillColor(int)Fill color after apply
getOverlayText() / setOverlayText(String)Overlay text after apply
isOverlayTextRepeated() / enableRepeatOverlayText(boolean)Repeat overlay text to fill region
getOverlayTextAlignment() / setOverlayTextAlignment(int)Overlay text alignment
getDefaultAppearance() / setDefaultAppearance(DefaultAppearance)Overlay font appearance
enableAutoFontSize()Auto-fit overlay font size
apply()Apply redaction — permanently remove content

Example: Create and Apply Redaction

java
import com.foxit.sdk.common.fxcrt.RectF;
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.pdf.annots.Annot;
import com.foxit.sdk.pdf.annots.DefaultAppearance;
import com.foxit.sdk.pdf.annots.Redact;

PDFDoc doc = new PDFDoc("path/to/Sample.pdf");
doc.load(null);
PDFPage page = doc.getPage(0);

RectF rect = new RectF(100, 700, 350, 720);
Redact redact = new Redact(page.addAnnot(Annot.e_Redact, rect));

redact.setFillColor(0xffff0000);
redact.setApplyFillColor(0xff000000);

redact.setOverlayText("已脱敏");
redact.setOverlayTextAlignment(1);

DefaultAppearance da = new DefaultAppearance();
da.setText_size(12);
da.setText_color(0xffffffff);
redact.setDefaultAppearance(da);

redact.resetAppearanceStream();

doc.saveAs("path/to/preview.pdf", PDFDoc.e_SaveFlagNormal);

redact.apply();
doc.saveAs("path/to/redacted.pdf", PDFDoc.e_SaveFlagNormal);

Example: Precise Text Redaction

Combine text search with QuadPoints:

java
import com.foxit.sdk.common.fxcrt.PointF;
import com.foxit.sdk.common.fxcrt.RectF;
import com.foxit.sdk.common.fxcrt.RectFArray;
import com.foxit.sdk.pdf.TextPage;
import com.foxit.sdk.pdf.TextSearch;
import com.foxit.sdk.pdf.annots.Annot;
import com.foxit.sdk.pdf.annots.QuadPoints;
import com.foxit.sdk.pdf.annots.QuadPointsArray;
import com.foxit.sdk.pdf.annots.Redact;

TextSearch textSearch = new TextSearch(doc, null, TextPage.e_ParseTextNormal);
textSearch.setPattern("机密信息");

if (textSearch.findNext()) {
    RectFArray rects = textSearch.getMatchRects();

    QuadPointsArray quadPointsArray = new QuadPointsArray();
    for (int i = 0; i < rects.getSize(); i++) {
        RectF r = rects.getAt(i);
        QuadPoints qp = new QuadPoints();
        qp.setFirst(new PointF(r.getLeft(), r.getTop()));
        qp.setSecond(new PointF(r.getRight(), r.getTop()));
        qp.setThird(new PointF(r.getLeft(), r.getBottom()));
        qp.setFourth(new PointF(r.getRight(), r.getBottom()));
        quadPointsArray.add(qp);
    }

    Redact redact = new Redact(
        page.addAnnot(Annot.e_Redact, new RectF(0, 0, 0, 0)));
    redact.setQuadPoints(quadPointsArray);
    redact.setApplyFillColor(0xff000000);
    redact.resetAppearanceStream();

    redact.apply();
}