PDF 图层 (PDF Layer)
Foxit PDF SDK支持PDF图层,也称为可选内容组 (Optional Content Groups,OCG) 。用户可以选择性地查看或隐藏多图层PDF文档的不同层中的内容。多图层广泛用于许多应用领域,如CAD制图、地图、分层艺术品以及多语言文档等。
在Foxit PDF SDK中,PDF图层与图层节点相关联。要获取图层节点,用户应首先构建PDF LayerTree对象,然后调用函数LayerTree.getRootNode以获取整个图层树的根图层节点。另外,您可以从根图层节点开始枚举图层树中的所有节点。Foxit PDF SDK提供APIs用来获取/设置图层数据,查看或隐藏不同图层中的内容,设置图层名称,添加或删除图层,以及编辑图层。
Example:
如何创建一个PDF图层
import static com.foxit.sdk.pdf.LayerTree; import static com.foxit.sdk.pdf.LayerNode; ... LayerTree layertree = new LayerTree(doc); LayerNode root = layertree.getRootNode();
如何设置所有图层节点的信息
import com.foxit.sdk.pdf.*; ... static void setAllLayerNodesInformation(LayerNode layer_node) throws PDFException { if (layer_node.hasLayer()) { layer_node.setDefaultVisible(true); layer_node.setExportUsage(e_StateUndefined); layer_node.setViewUsage(e_StateOFF); LayerPrintData print_data = new LayerPrintData("subtype_print", e_StateON); layer_node.setPrintUsage(print_data); LayerZoomData zoom_data = new LayerZoomData(1, 10); layer_node.setZoomUsage(zoom_data); String new_name = String.format("[View_OFF_Print_ON_Export_Undefined]") + layer_node.getName(); layer_node.setName(new_name); } int count = layer_node.getChildrenCount(); for (int i = 0; i < count; i++) { LayerNode child = layer_node.getChild(i); setAllLayerNodesInformation(child); } } ...
如何编辑图层树
import com.foxit.sdk.pdf.*; ... LayerTree layertree = new LayerTree(doc); LayerNode root = layertree.getRootNode(); int children_count = root.getChildrenCount(); root.removeChild(children_count -1); LayerNode child = root.getChild(children_count - 2); LayerNode child0 = root.getChild(0); child.moveTo(child0, 0); child.addChild(0, "AddedLayerNode", true); child.addChild(0, "AddedNode", false); ...