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
- Create redact annotation — Add a Redact annotation over the target area
- Configure appearance — Overlay color, text, etc.
- Preview — Mark only; original content remains
- Apply — Permanently remove marked content; annotations are removed
Core Methods
| Method | Description |
|---|---|
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();
}