Skip to content

图层

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() 返回图层树结构,节点中通常包含 idnamevisiblechildren 等信息。业务侧可据此渲染自定义图层面板。

遍历图层节点

图层节点数量和指定节点可从 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() 可通过 flagslayerName 控制导入页面时是否将源文档图层作为非可选标签加入当前文档。具体参数请参考 页面组织

注意事项

  • 图层可见性属于文档显示状态,是否写入文件取决于具体修改接口和保存流程。
  • 设置图层可见性前,建议先调用 getLayerNodesJson() 获取最新图层树。
  • 图层节点 ID 来自图层树,不应由业务自行拼接。
  • 图层较多时,读取和渲染自定义图层面板可能影响性能,应按需展示。