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.