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.