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();
}