如何用JavaScript将PDF子书签提升至与父书签同层级?
批量扁平化PDF书签层级(PDF X-Change Editor JS实现)
需求说明
我是一名有基础编程知识的普通上班族,想简化工作流程,需要删除PDF的所有书签层级,把所有子书签调整到和父书签同一层级。目前用PDF X-Change Editor的JavaScript控制台操作,现有代码只能检测子书签存在与否,需要实现扁平化功能。
现有检测代码
// Get the root bookmark node of the document var rootBookmark = this.bookmarkRoot; // Check if the root bookmark node exists if (rootBookmark) { // Iterate through each child bookmark for (var i = 0; i < rootBookmark.children.length; i++) { var bookmark = rootBookmark.children[i]; // Perform operations on each bookmark, such as accessing its name or properties console.println("Bookmark Name: " + bookmark.name); // Check every children if (rootBookmark.children[i].children){ console.println("Si entro"); }else{ console.println("no"); } } } else { console.println("No bookmarks found in the document."); }
实现扁平化的代码方案
// 获取文档根书签节点 var rootBookmark = this.bookmarkRoot; if (rootBookmark) { // 存储所有需要移到根层级的书签 var allBookmarks = []; // 递归遍历所有书签,收集非根节点的书签 function collectBookmarks(bookmarkNode) { // 如果当前节点有子节点,优先遍历子节点 if (bookmarkNode.children && bookmarkNode.children.length > 0) { for (var i = 0; i < bookmarkNode.children.length; i++) { collectBookmarks(bookmarkNode.children[i]); } } // 根节点不加入收集列表,其余书签全部加入 if (bookmarkNode !== rootBookmark) { allBookmarks.push(bookmarkNode); } } // 从根节点开始遍历收集所有书签 collectBookmarks(rootBookmark); // 清空根节点原有子节点,避免残留层级 rootBookmark.children = []; // 将所有收集到的书签添加到根节点下,实现同一层级 for (var j = 0; j < allBookmarks.length; j++) { rootBookmark.addChild(allBookmarks[j]); } console.println("书签层级已扁平化完成,共处理 " + allBookmarks.length + " 个书签"); } else { console.println("文档中未找到任何书签"); }
使用说明
- 操作前请备份原PDF文件,避免误操作导致数据丢失
- 打开PDF X-Change Editor,按
Ctrl+J调出JavaScript控制台 - 将上述代码粘贴到控制台,按回车执行即可
内容的提问来源于stack exchange,提问作者user20335602
相关产品推荐
相关产品推荐

