图层
PDF 图层也称可选内容组(Optional Content Group, OCG),用于控制页面中部分内容在查看、打印或导出时的可见性。福昕 PDF SDK(Web)可读取文档图层树,并控制图层节点的可见状态。
如果使用完整 UI(UIExtension),图层面板通常可用于展示图层树并切换图层显示。需要自定义图层面板或在业务代码中控制图层可见性时,可使用公开的 PDFDoc 图层接口。
相关接口包括:
PDFDoc.getLayerNodesJson():读取文档图层树。PDFDoc.setLayerNodeVisible():设置指定图层节点是否可见。
读取图层树
javascript
const pdfDoc = pdfViewer.getCurrentPDFDoc();
const layerTree = await pdfDoc.getLayerNodesJson();
console.log(layerTree);
getLayerNodesJson() 返回图层树结构,节点中通常包含 id、name、visible 和 children 等信息。业务侧可据此渲染自定义图层面板。
遍历图层节点
图层节点数量和指定节点可从 getLayerNodesJson() 返回的树结构中遍历获得,不需要调用额外的计数或查找接口。
javascript
function walkLayerNodes(node, visit) {
visit(node);
(node.children || []).forEach(child => walkLayerNodes(child, visit));
}
const layerTree = await pdfDoc.getLayerNodesJson();
walkLayerNodes(layerTree, (node) => {
console.log(node.id, node.name, node.visible);
});
当文档图层节点很多时,建议避免一次性渲染过深的树形 UI,可按需展开节点。
设置图层可见性
PDFDoc.setLayerNodeVisible(layerId, visible) 用于切换图层节点显示状态。
javascript
await pdfDoc.getLayerNodesJson();
await pdfDoc.setLayerNodeVisible(layerId, false);
await pdfViewer.redraw(true);
设置成功后,若页面未立即更新,可调用 PDFViewer.redraw(true) 重新渲染。
导入页面时保留图层
部分页面导入接口支持图层相关参数。例如 PDFDoc.insertPages() 可通过 flags 和 layerName 控制导入页面时是否将源文档图层作为非可选标签加入当前文档。具体参数请参考 页面组织。
注意事项
- 图层可见性属于文档显示状态,是否写入文件取决于具体修改接口和保存流程。
- 设置图层可见性前,建议先调用
getLayerNodesJson()获取最新图层树。 - 图层节点 ID 来自图层树,不应由业务自行拼接。
- 图层较多时,读取和渲染自定义图层面板可能影响性能,应按需展示。