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
| Class | Description |
|---|---|
LayerTree | Layer tree from PDFDoc; root node and global state |
LayerNode | Layer node; children, name, visibility, usage |
LayerPrintData | Print usage |
LayerZoomData | Zoom 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);| Constant | Description |
|---|---|
e_StateON | All layers visible by default |
e_StateOFF | All layers hidden by default |
e_StateUnchanged | Unchanged |
e_StateUndefined | Undefined |
Manage Layer Nodes
Add Child Node
java
LayerNode newNode = parentNode.addChild(0, "新图层", true);addChild() parameters:
| Parameter | Type | Description |
|---|---|---|
index | int | Insert index |
name | String | Layer name |
has_Layer | boolean | true = 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);Print Usage
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.