Text Markup Annotations
Text markup annotations visually mark existing PDF text. Foxit PDF SDK for Android provides highlight, underline, strikethrough, and squiggly via the TextMarkup base class and subtypes.
| Type | Constant | Description |
|---|---|---|
| Highlight | Annot.e_Highlight | Semi-transparent color over text |
| Underline | Annot.e_Underline | Underline below text |
| Strikethrough | Annot.e_StrikeOut | Line through text |
| Squiggly | Annot.e_Squiggly | Wavy underline |
QuadPoints
Text markup positioning uses QuadPoints—four points per region (usually one line). Multiple QuadPoints form a QuadPointsArray for multi-line or multi-region text.
first ──────── second
│ │
third ──────── fourthfirst— top-leftsecond— top-rightthird— bottom-leftfourth— bottom-right
You can use an empty initial rect (0, 0, 0, 0); the annotation rect is computed from QuadPoints.
Example: Highlight from Text Search
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.PDFDoc;
import com.foxit.sdk.pdf.PDFPage;
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.TextMarkup;
PDFDoc doc = new PDFDoc("path/to/Sample.pdf");
doc.load(null);
PDFPage page = doc.getPage(0);
TextSearch textSearch = new TextSearch(doc, null, TextPage.e_ParseTextNormal);
textSearch.setPattern("foxit");
if (textSearch.findNext()) {
RectFArray rects = textSearch.getMatchRects();
QuadPointsArray quadPointsArray = new QuadPointsArray();
for (int i = 0; i < rects.getSize(); i++) {
RectF rect = rects.getAt(i);
QuadPoints qp = new QuadPoints();
qp.setFirst(new PointF(rect.getLeft(), rect.getTop()));
qp.setSecond(new PointF(rect.getRight(), rect.getTop()));
qp.setThird(new PointF(rect.getLeft(), rect.getBottom()));
qp.setFourth(new PointF(rect.getRight(), rect.getBottom()));
quadPointsArray.add(qp);
}
RectF emptyRect = new RectF(0, 0, 0, 0);
TextMarkup highlight = new TextMarkup(
page.addAnnot(Annot.e_Highlight, emptyRect));
highlight.setQuadPoints(quadPointsArray);
highlight.setBorderColor(0xffff0000); // 红色
highlight.setOpacity(0.3f); // 30% 透明度
highlight.resetAppearanceStream();
}
doc.saveAs("path/to/output.pdf", PDFDoc.e_SaveFlagNormal);Example: Underline Annotation
When text coordinates are known, build QuadPoints directly:
java
import com.foxit.sdk.common.fxcrt.PointF;
import com.foxit.sdk.common.fxcrt.RectF;
import com.foxit.sdk.pdf.PDFPage;
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.TextMarkup;
PDFPage page = doc.getPage(0);
QuadPoints qp = new QuadPoints();
qp.setFirst(new PointF(72, 750));
qp.setSecond(new PointF(300, 750));
qp.setThird(new PointF(72, 730));
qp.setFourth(new PointF(300, 730));
QuadPointsArray quadPointsArray = new QuadPointsArray();
quadPointsArray.add(qp);
TextMarkup underline = new TextMarkup(
page.addAnnot(Annot.e_Underline, new RectF(0, 0, 0, 0)));
underline.setQuadPoints(quadPointsArray);
underline.setBorderColor(0xff00aa00); // 绿色
underline.resetAppearanceStream();Tip
Use Annot.e_StrikeOut or Annot.e_Squiggly instead of Annot.e_Underline for strikethrough or squiggly; the rest of the code is the same.
Common Properties
| Method | Description |
|---|---|
getQuadPoints() / setQuadPoints(QuadPointsArray) | QuadPoints array |
setBorderColor(int) | Mark color |
setOpacity(float) | Opacity (0.0 ~ 1.0) |
setContent(String) | Comment text in annotation panel |
setTitle(String) | Author/title |
resetAppearanceStream() | Update appearance |