Skip to content

Page Objects

Foxit PDF SDK for Android provides two levels of page content APIs through the Core SDK:

  • PDFPage shortcuts — Add text or images via PDFPage convenience methods for common cases.
  • Graphics objects API — Operate on the page content stream directly: create, traverse, modify, and delete text, images, paths, and more for precise control.

PDFPage Shortcuts: Insert Text and Images

PDFPage provides shortcuts without managing graphics objects and content streams manually.

Insert Image

From file path:

java
PDFPage.addImageFromFilePath(String file_path, PointF position,
    float width, float height, boolean auto_generate_content)

From Image object (multi-frame):

java
PDFPage.addImage(Image image, int frame_index, PointF position,
    float width, float height, boolean auto_generate_content)

NOTE

Parse the target page before calling addImage / addImageFromFilePath.

Example:

java
PDFDoc doc = new PDFDoc(filePath);
doc.load(null);

PDFPage page = doc.getPage(0);
if (!page.isParsed()) {
    Progressive parse = page.startParse(PDFPage.e_ParsePageNormal, null, false);
    int state = Progressive.e_ToBeContinued;
    while (state == Progressive.e_ToBeContinued) {
        state = parse.resume();
    }
}

page.addImageFromFilePath("/sdcard/FoxitSDK/logo.png",
    new PointF(20, 30), 60, 50, true);

doc.saveAs(outputPath, PDFDoc.e_SaveFlagNormal);

Insert Text

java
PDFPage.addText(String text, RectF rect, RichTextStyle style)
PDFPage.addText(String text, RectF rect, RichTextStyle style, int rotation)

RichTextStyle sets font, size, color, bold, italic, underline, and alignment.

Example:

java
RichTextStyle style = new RichTextStyle();
style.setFont(new Font(Font.e_StdIDHelvetica));
style.setText_size(16.0f);
style.setText_color(0xFF000000);
style.setIs_bold(true);
style.setText_alignment(CommonDefines.e_AlignmentLeft);

page.addText("Hello, Foxit PDF SDK!", new RectF(50, 750, 400, 700), style);

doc.saveAs(outputPath, PDFDoc.e_SaveFlagNormal);

Graphics Objects API

Direct content-stream APIs for precise control of object properties, position, and z-order.

Core Classes

ClassPackageDescription
GraphicsObjectscom.foxit.sdk.pdfGraphics object collection (PDFPage parent); insert, delete, traverse
GraphicsObjectcom.foxit.sdk.pdf.graphicsBase; type, color, matrix, opacity
TextObjectcom.foxit.sdk.pdf.graphicsText
ImageObjectcom.foxit.sdk.pdf.graphicsImage
PathObjectcom.foxit.sdk.pdf.graphicsVector paths
FormXObjectcom.foxit.sdk.pdf.graphicsReusable content
ShadingObjectcom.foxit.sdk.pdf.graphicsShading

Graphics Object Types

ConstantValueDescription
GraphicsObject.e_TypeAll0All types
GraphicsObject.e_TypeText1Text
GraphicsObject.e_TypePath2Path
GraphicsObject.e_TypeImage3Image
GraphicsObject.e_TypeShading4Shading
GraphicsObject.e_TypeFormXObject5Form XObject

Traverse Page Graphics Objects

PDFPage extends GraphicsObjects:

java
PDFPage page = doc.getPage(0);
if (!page.isParsed()) {
    Progressive parse = page.startParse(PDFPage.e_ParsePageNormal, null, false);
    int state = Progressive.e_ToBeContinued;
    while (state == Progressive.e_ToBeContinued) {
        state = parse.resume();
    }
}

long pos = page.getFirstGraphicsObjectPosition(GraphicsObject.e_TypeAll);
while (pos != 0) {
    GraphicsObject obj = page.getGraphicsObject(pos);
    int type = obj.getType();

    switch (type) {
        case GraphicsObject.e_TypeText:
            TextObject textObj = obj.getTextObject();
            String text = textObj.getText();
            break;
        case GraphicsObject.e_TypeImage:
            ImageObject imgObj = obj.getImageObject();
            break;
        case GraphicsObject.e_TypePath:
            PathObject pathObj = obj.getPathObject();
            break;
    }

    pos = page.getNextGraphicsObjectPosition(pos, GraphicsObject.e_TypeAll);
}

Create Text Object

java
TextObject textObj = TextObject.create();
textObj.setText("Hello, Foxit SDK!");

TextState textState = new TextState();
textState.font_size = 24.0f;
textState.font = new Font(Font.e_StdIDHelvetica);
textState.textmode = TextState.e_ModeFill;
textObj.setTextState(page, textState, false, 400);

textObj.setFillColor(0xFF000000);

Matrix2D matrix = new Matrix2D(1, 0, 0, 1, 100, 700);
textObj.setMatrix(matrix);

long lastPos = page.getLastGraphicsObjectPosition(GraphicsObject.e_TypeAll);
page.insertGraphicsObject(lastPos, textObj);

page.generateContent();

Important

After insert, delete, or modify, call page.generateContent() to write changes to the content stream.

Create Image Object

java
ImageObject imgObj = ImageObject.create(doc);

Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
imgObj.setBitmap(bitmap, null);

Matrix2D matrix = new Matrix2D(200, 0, 0, 150, 100, 500);
imgObj.setMatrix(matrix);

long lastPos = page.getLastGraphicsObjectPosition(GraphicsObject.e_TypeAll);
page.insertGraphicsObject(lastPos, imgObj);
page.generateContent();

Create Path Object

java
PathObject pathObj = PathObject.create();

Path pathData = new Path();
pathData.moveTo(new PointF(100, 700));
pathData.lineTo(new PointF(300, 700));
pathData.lineTo(new PointF(300, 500));
pathData.closeFigure();

pathObj.setPathData(pathData);
pathObj.setFillMode(Path.e_FillModeAlternate);
pathObj.setStrokeState(true);
pathObj.setStrokeColor(0xFF0000FF);
pathObj.setFillColor(0x80FFFF00);

long lastPos = page.getLastGraphicsObjectPosition(GraphicsObject.e_TypeAll);
page.insertGraphicsObject(lastPos, pathObj);
page.generateContent();

Create Form XObject

java
FormXObject formXObj = FormXObject.create(doc);

formXObj.importPageContent(sourcePage, false);

GraphicsObjects innerObjects = formXObj.getGraphicsObjects();

Delete Graphics Objects

java
page.removeGraphicsObject(graphicsObject);

page.removeGraphicsObjectByPosition(position);

page.generateContent();

Change Object Order

java
page.moveGraphicsObjectByPosition(currentPos, targetPos);
page.generateContent();

API Reference

See the API Reference for full GraphicsObject, TextObject, ImageObject, PathObject, and FormXObject documentation.