Skip to content

Shapes and Drawing ​

This guide covers Line, Square, Circle, Polygon, PolyLine, and Ink annotations.

Line Annotations ​

Line annotations draw from start to end with optional arrow endpoints.

Endpoint Styles ​

ConstantValueDescription
Markup.e_EndingStyleNone0None
Markup.e_EndingStyleSquare1Square
Markup.e_EndingStyleCircle2Circle
Markup.e_EndingStyleDiamond3Diamond
Markup.e_EndingStyleOpenArrow4Open arrow
Markup.e_EndingStyleClosedArrow5Closed arrow
Markup.e_EndingStyleButt6Butt
Markup.e_EndingStyleROpenArrow7Reverse open arrow
Markup.e_EndingStyleRClosedArrow8Reverse closed arrow
Markup.e_EndingStyleSlash9Slash

Core Methods ​

MethodDescription
getStartPoint() / setStartPoint(PointF)Start point
getEndPoint() / setEndPoint(PointF)End point
getLineStartStyle() / setLineStartStyle(int)Start style
getLineEndStyle() / setLineEndStyle(int)End style
getStyleFillColor() / setStyleFillColor(int)Endpoint fill color
hasCaption() / enableCaption(boolean)Caption
getCaptionOffset() / setCaptionOffset(PointF)Caption offset

Example: Line with Arrow ​

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.Line;
import com.foxit.sdk.pdf.annots.Markup;

PDFPage page = doc.getPage(0);

RectF rect = new RectF(100, 300, 400, 350);
Line line = new Line(page.addAnnot(Annot.e_Line, rect));

line.setStartPoint(new PointF(100, 325));
line.setEndPoint(new PointF(400, 325));

line.setLineStartStyle(Markup.e_EndingStyleNone);
line.setLineEndStyle(Markup.e_EndingStyleClosedArrow);

line.setBorderColor(0xffff0000);
line.setContent("Watch out this section");
line.resetAppearanceStream();

Square and Circle ​

Square and Circle draw box or oval markers with border and fill colors.

Example: Square ​

java
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.Square;

PDFPage page = doc.getPage(0);

RectF rect = new RectF(100, 600, 300, 700);
Square square = new Square(page.addAnnot(Annot.e_Square, rect));

square.setBorderColor(0xff0000ff);
square.setFillColor(0x330000ff);
square.setOpacity(0.8f);
square.setContent("Marked Section");
square.resetAppearanceStream();

Example: Circle ​

java
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.Circle;

PDFPage page = doc.getPage(0);

RectF rect = new RectF(100, 400, 250, 500);
Circle circle = new Circle(page.addAnnot(Annot.e_Circle, rect));

circle.setBorderColor(0xffff6600);
circle.setFillColor(0x22ff6600);
circle.setContent("Key Content");
circle.resetAppearanceStream();

Polygon and PolyLine ​

Vertices define the shape; polygons close; polylines stay open.

Example: Polygon ​

java
import com.foxit.sdk.common.fxcrt.PointF;
import com.foxit.sdk.common.fxcrt.PointFArray;
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.Markup;

PDFPage page = doc.getPage(0);

RectF rect = new RectF(100, 200, 300, 350);
Markup polygon = new Markup(page.addAnnot(Annot.e_Polygon, rect));

PointFArray vertices = new PointFArray();
vertices.add(new PointF(150, 200));
vertices.add(new PointF(300, 250));
vertices.add(new PointF(280, 350));
vertices.add(new PointF(120, 330));
polygon.setVertexes(vertices);

polygon.setBorderColor(0xff009900);
polygon.resetAppearanceStream();

Ink Annotations ​

Ink records freehand strokes via Path.

Path Methods ​

MethodDescription
moveTo(PointF)Start stroke
lineTo(PointF)Line to point
cubicBezierTo(PointF, PointF, PointF)Cubic Bézier
closeFigure()Close path
getPointCount() / getPoint(int)Point count / point at index

Example: Ink ​

java
import com.foxit.sdk.common.fxcrt.PointF;
import com.foxit.sdk.common.fxcrt.RectF;
import com.foxit.sdk.common.Path;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.pdf.annots.Annot;
import com.foxit.sdk.pdf.annots.Ink;

PDFPage page = doc.getPage(0);

RectF rect = new RectF(50, 100, 350, 300);
Ink ink = new Ink(page.addAnnot(Annot.e_Ink, rect));

Path path = new Path();
path.moveTo(new PointF(60, 150));
path.lineTo(new PointF(120, 200));
path.lineTo(new PointF(200, 160));
path.lineTo(new PointF(300, 250));

ink.setInkList(path);
ink.setBorderColor(0xff000000);
ink.setOpacity(0.9f);
ink.resetAppearanceStream();

NOTE

Call ink.enableUseBezier(true) for smoother strokes with Bézier curves.