Skip to content

Layers (Optional Content)

PDF layers (optional content groups, OCG) organize page content so users can control visibility, printing, and export per layer. Foxit PDF SDK for Android provides layer APIs through the Core SDK to read the layer tree, manage nodes, and control graphics objects in layers.

Core Classes

ClassDescription
LayerTreeLayer tree from PDFDoc; root node and global state
LayerNodeLayer node; children, name, visibility, usage
LayerPrintDataPrint usage
LayerZoomDataZoom usage

Check Whether Document Has Layers

java
if (doc.hasLayer()) {
    LayerTree layerTree = new LayerTree(doc);
    // ...
}

Get Layer Tree

java
LayerTree layerTree = new LayerTree(doc);

LayerNode root = layerTree.getRootNode();

int count = root.getChildrenCount();
for (int i = 0; i < count; i++) {
    LayerNode child = root.getChild(i);
    String name = child.getName();
    boolean hasLayer = child.hasLayer();
}

Set Global Base State

java
layerTree.setBaseState(LayerTree.e_StateON);
ConstantDescription
e_StateONAll layers visible by default
e_StateOFFAll layers hidden by default
e_StateUnchangedUnchanged
e_StateUndefinedUndefined

Manage Layer Nodes

Add Child Node

java
LayerNode newNode = parentNode.addChild(0, "新图层", true);

addChild() parameters:

ParameterTypeDescription
indexintInsert index
nameStringLayer name
has_Layerbooleantrue = layer; false = group only

Remove and Move Nodes

java
parentNode.removeChild(0);
node.moveTo(newParent, 2);

Set Layer Properties

java
node.setName("Background Layer");
node.setDefaultVisible(true);

Control Layer Usage

View and Export

java
node.setViewUsage(LayerTree.e_StateON);
node.setExportUsage(LayerTree.e_StateOFF);
java
LayerPrintData printData = node.getPrintUsage();
node.setPrintUsage(printData);

Zoom Usage

java
LayerZoomData zoomData = node.getZoomUsage();
node.setZoomUsage(zoomData);

Remove Usage

java
node.removeUsage(usageType);

Layer Queries

java
boolean isLayer = node.hasLayer();
boolean locked = node.isLocked();
boolean inPage = node.isInPage(page);
boolean hasIntent = node.hasIntent("View");

Graphics Objects in Layers

java
GraphicsObjectArray objects = node.getGraphicsObjects(page);
node.addGraphicsObject(page, graphicsObject);
node.removeGraphicsObject(graphicsObject);

Example: Traverse Layer Tree

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

if (!doc.hasLayer()) return;

LayerTree layerTree = new LayerTree(doc);
LayerNode root = layerTree.getRootNode();
printLayerNode(root, 0);

private void printLayerNode(LayerNode node, int depth) throws PDFException {
    String indent = new String(new char[depth * 2]).replace('\0', ' ');
    String name = node.getName();
    boolean isLayer = node.hasLayer();

    Log.d("Layer", indent + name + (isLayer ? " [Layer]" : " [Group]"));

    int count = node.getChildrenCount();
    for (int i = 0; i < count; i++) {
        printLayerNode(node.getChild(i), depth + 1);
    }
}

API Reference

See the API Reference for full LayerTree and LayerNode documentation.