### Advanced Button Management Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E5%9C%A8%E8%8F%9C%E5%8D%95%E4%B8%8A%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8C%89%E9%92%AE%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html An example demonstrating the creation of multiple advanced menu buttons. ```javascript // 高级按钮管理示例 function createAdvancedMenuButtons() { try { // 创建高级功能按钮 TANGER_OCX_OBJ.AddCustomButtonOnMenu(0, "全屏", false, 2001); TANGER_OCX_OBJ.AddCustomButtonOnMenu(1, "签名", true, 2002); TANGER_OCX_OBJ.AddCustomButtonOnMenu(2, "转换", true, 2003); TANGER_OCX_OBJ.AddCustomButtonOnMenu(3, "设置", false, 2004); TANGER_OCX_OBJ.AddCustomButtonOnMenu(4, "帮助", false, 2005); console.log("高级菜单按钮创建完成"); } catch (error) { console.error("高级菜单按钮创建失败:", error.message); } } ``` -------------------------------- ### AddMultiPicFromLocal Usage Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%9B%BD%E4%BA%A7%E5%8C%96%E7%89%88%E6%9C%AC%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3/%E5%9B%BE%E7%89%87%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Example showing how to trigger the file selection dialog for multiple images. ```javascript // 弹出文件选择对话框,允许用户选择多张图片 OCX_OBJ.AddMultiPicFromLocal(); ``` -------------------------------- ### AddFileMenuItem Usage Examples Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Demonstrates adding custom items and a separator to the file menu. ```javascript // 在文件菜单中增加自定义项目 OCX_OBJ.AddFileMenuItem("导出为PDF", false, true, 1001); OCX_OBJ.AddFileMenuItem(""); // 添加分隔符 OCX_OBJ.AddFileMenuItem("发送邮件", false, true, 1002); ``` -------------------------------- ### Basic Button Creation Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E5%9C%A8%E8%8F%9C%E5%8D%95%E4%B8%8A%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8C%89%E9%92%AE%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html A simple implementation for creating basic menu buttons. ```javascript // 基础按钮创建示例 function createBasicMenuButtons() { try { // 创建基础功能按钮 TANGER_OCX_OBJ.AddCustomButtonOnMenu(0, "新建", false, 1001); TANGER_OCX_OBJ.AddCustomButtonOnMenu(1, "打开", false, 1002); TANGER_OCX_OBJ.AddCustomButtonOnMenu(2, "保存", true, 1003); TANGER_OCX_OBJ.AddCustomButtonOnMenu(3, "打印", true, 1004); console.log("基础菜单按钮创建完成"); } catch (error) { console.error("基础菜单按钮创建失败:", error.message); } } ``` -------------------------------- ### Basic Bookmark Management Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/PDF%E6%8F%92%E4%BB%B6%E8%87%AA%E5%AE%9A%E4%B9%89%E4%B9%A6%E7%AD%BE%E7%9B%B8%E5%85%B3%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83.html A simplified implementation for adding and retrieving basic bookmark information. ```javascript // 基础书签管理示例 function basicBookmarkManagement() { var plugInObj = OfficeControlObj.ActiveDocument; // 添加书签 function addBookmark() { plugInObj.AddCustomBookmark(false, "第一章", 0, 0, 0); plugInObj.AddCustomBookmark(false, "第二章", 1, 0, 0); console.log("书签添加完成"); } // 获取书签信息 function getBookmarkInfo() { var count = plugInObj.CustomBookmarksCount; console.log("书签总数:", count); for (var i = 0; i < count; i++) { var name = plugInObj.CustomBookmarksName(i); console.log("书签" + i + ":", name); } } return { addBookmark: addBookmark, getBookmarkInfo: getBookmarkInfo }; } ``` -------------------------------- ### Dynamic Button Management Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E5%9C%A8%E8%8F%9C%E5%8D%95%E4%B8%8A%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8C%89%E9%92%AE%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Demonstrates how to dynamically add buttons based on user roles. ```javascript // 动态按钮管理示例 function dynamicButtonManagement() { try { // 根据用户权限动态添加按钮 var userRole = getUserRole(); if (userRole === 'admin') { // 管理员显示所有按钮 TANGER_OCX_OBJ.AddCustomButtonOnMenu(0, "管理", false, 3001); TANGER_OCX_OBJ.AddCustomButtonOnMenu(1, "设置", false, 3002); TANGER_OCX_OBJ.AddCustomButtonOnMenu(2, "日志", false, 3003); } else if (userRole === 'editor') { // 编辑者显示编辑相关按钮 TANGER_OCX_OBJ.AddCustomButtonOnMenu(0, "编辑", true, 4001); TANGER_OCX_OBJ.AddCustomButtonOnMenu(1, "保存", true, 4002); } else { // 查看者显示查看相关按钮 TANGER_OCX_OBJ.AddCustomButtonOnMenu(0, "查看", true, 5001); TANGER_OCX_OBJ.AddCustomButtonOnMenu(1, "打印", true, 5002); } console.log("动态按钮管理完成"); } catch (error) { console.error("动态按钮管理失败:", error.message); } } ``` -------------------------------- ### Basic Browser Settings Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%B5%8F%E8%A7%88%E5%99%A8%E8%AE%BE%E7%BD%AE%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html A standard implementation for setting up basic browser security with result logging. ```javascript // 基础浏览器设置示例 function basicBrowserSettings() { try { // 添加可信站点 OCX_OBJ.AddDomainToTrustSite("example.com"); // 设置IE保护模式 var result = OCX_OBJ.SetIEProtectionMode(true); console.log("基础浏览器设置完成,保护模式设置结果:", result); } catch (error) { console.error("基础浏览器设置失败:", error.message); } } ``` -------------------------------- ### Basic Browser Setup with JavaScript Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%B5%8F%E8%A7%88%E5%99%A8%E8%AE%BE%E7%BD%AE%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Demonstrates the fundamental process of adding a trusted site and enabling IE protection mode. ```javascript // 基本浏览器设置流程 function basicBrowserSetup() { try { // 添加可信站点 OCX_OBJ.AddDomainToTrustSite("example.com"); // 设置IE保护模式 OCX_OBJ.SetIEProtectionMode(true); console.log("基本浏览器设置完成"); } catch (error) { console.error("基本浏览器设置失败:", error.message); } } ``` -------------------------------- ### Basic Image Addition Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E5%9B%BE%E7%89%87%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Demonstrates the standard implementation for adding both local and network-based images. ```javascript // 基础图片添加示例 function addBasicImages() { try { // 添加本地图片 OCX_OBJ.AddPicFromLocal("C:\\images\\logo.png", false, true, 0, 0, 1, 100, 1); // 添加网络图片 OCX_OBJ.AddPicFromURL("http://example.com/banner.jpg", true, 0, 0, 1, 100, 1); console.log("基础图片添加完成"); } catch (error) { console.error("基础图片添加失败:", error.message); } } ``` -------------------------------- ### Basic Language Management Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%9B%BD%E4%BA%A7%E5%8C%96%E7%89%88%E6%9C%AC%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3/%E8%AF%AD%E8%A8%80%E7%9B%B8%E5%85%B3%E5%B1%9E%E6%80%A7.html A simplified implementation for setting and retrieving the language code. ```javascript // 基础语言管理示例 function basicLanguageManagement() { var obj = OfficeControlObj; // 设置语言 function setLanguage(langCode) { obj.UILangCode = langCode; console.log("语言已设置为:", langCode); } // 获取当前语言 function getCurrentLanguage() { var currentLang = obj.UILangCode; console.log("当前语言:", currentLang); return currentLang; } return { setLanguage: setLanguage, getCurrentLanguage: getCurrentLanguage }; } ``` -------------------------------- ### Setup MultiSecSign Properties Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E5%AE%89%E5%85%A8%E7%94%B5%E5%AD%90%E5%8D%B0%E7%AB%A0%E9%80%9A%E7%94%A8%E5%B1%9E%E6%80%A7.html Initializes all cross-page seal properties before the signing process. ```javascript // 设置所有骑缝章相关属性 function setupMultiSecSignProperties() { // 位置设置 Obj.SetMultiSecSignPosition = 1; // 页面居中 // 偏移设置 Obj.IsAddRandomOffsetForMultiSecSign = true; // 边距设置 Obj.MultiSecSignMarginSize = 3; // 页面设置 Obj.IsAddSignToOddForMultiSecSign = true; console.log("骑缝章属性设置完成"); } ``` -------------------------------- ### Complete Custom Menu System Implementation Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%9B%BD%E4%BA%A7%E5%8C%96%E7%89%88%E6%9C%AC%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3/%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html A comprehensive example demonstrating the creation of a custom menu system, dynamic state toggling, and cleanup procedures. ```javascript // 创建完整的自定义菜单系统 function createCustomMenuSystem() { // 1. 添加自定义主菜单 OCX_OBJ.AddCustomMenu2(0, "工具菜单"); OCX_OBJ.AddCustomMenu2(1, "帮助菜单"); // 2. 为第一个主菜单添加子菜单 OCX_OBJ.AddCustomMenuItem2(0, 0, -1, false, "工具1", false, 100); OCX_OBJ.AddCustomMenuItem2(0, 1, -1, false, "工具2", false, 101); OCX_OBJ.AddCustomMenuItem2(0, 2, -1, true, "更多工具"); // 子菜单 OCX_OBJ.AddCustomMenuItem2(0, 2, 0, false, "高级工具1", false, 102); OCX_OBJ.AddCustomMenuItem2(0, 2, 1, false, "高级工具2", false, 103); // 3. 为第二个主菜单添加子菜单 OCX_OBJ.AddCustomMenuItem2(1, 0, -1, false, "帮助文档", false, 200); OCX_OBJ.AddCustomMenuItem2(1, 1, -1, false, "关于", false, 201); // 4. 在文件菜单中添加自定义项 OCX_OBJ.AddFileMenuItem("自定义保存", false, true, 300); OCX_OBJ.AddFileMenuItem("", true); // 分隔线 OCX_OBJ.AddFileMenuItem("自定义导出", false, true, 301); // 5. 添加菜单栏按钮 OCX_OBJ.AddCustomButtonOnMenu(0, "快速保存", true, 400); OCX_OBJ.AddCustomButtonOnMenu(1, "设置", false, 401); } // 动态控制菜单状态 function toggleMenuItems(enabled) { OCX_OBJ.EnableCustomMenuItem2(0, 0, -1, enabled); OCX_OBJ.EnableCustomMenuItem2(0, 1, -1, enabled); } // 清理自定义菜单 function cleanupCustomMenus() { OCX_OBJ.RemoveCustomMenu2(0); OCX_OBJ.RemoveCustomMenu2(1); OCX_OBJ.RemoveCustomButtonOnMenu(0); OCX_OBJ.RemoveCustomButtonOnMenu(1); } ``` -------------------------------- ### Create Basic Toolbar Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E8%87%AA%E5%AE%9A%E4%B9%89%E5%B7%A5%E5%85%B7%E6%A0%8F%E6%B7%BB%E5%8A%A0%E6%8C%89%E9%92%AE.html A simplified example of creating a basic toolbar with file, edit, and print operations. ```javascript // 基础工具栏创建示例 function createBasicToolbar() { try { // 创建文件操作按钮 var newButton = OCX_OBJ.AddCustomToolButton("新建", 3); var openButton = OCX_OBJ.AddCustomToolButton("打开", 4); var saveButton = OCX_OBJ.AddCustomToolButton("保存", 5); // 添加分隔符 OCX_OBJ.AddCustomToolButton("", -1); // 创建编辑操作按钮 var copyButton = OCX_OBJ.AddCustomToolButton("复制", 0); var cutButton = OCX_OBJ.AddCustomToolButton("剪切", 1); var pasteButton = OCX_OBJ.AddCustomToolButton("粘贴", 8); // 添加分隔符 OCX_OBJ.AddCustomToolButton("", -1); // 创建打印操作按钮 var printButton = OCX_OBJ.AddCustomToolButton("打印", 9); var printPreviewButton = OCX_OBJ.AddCustomToolButton("预览", 10); console.log("基础工具栏创建完成"); } catch (error) { console.error("基础工具栏创建失败:", error.message); } } ``` -------------------------------- ### GetUploadFileAttachItemFile Usage Examples Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E9%99%84%E4%BB%B6%E4%B8%8A%E4%BC%A0%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Examples demonstrating how to retrieve a single attachment, iterate through all attachments, and extract file metadata using the GetUploadFileAttachItemFile method. ```javascript // 获取指定索引的附件文件 function getAttachmentFile(index) { try { var fileName = OCX_OBJ.GetUploadFileAttachItemFile(index); console.log("附件文件:", fileName); return fileName; } catch (error) { console.error("获取附件文件失败:", error.message); return ""; } } // 遍历所有附件文件 function listAllAttachments() { try { var fileCount = OCX_OBJ.GetUploadFileAttachFileCount(); var attachments = []; for (var i = 0; i < fileCount; i++) { var fileName = OCX_OBJ.GetUploadFileAttachItemFile(i); attachments.push(fileName); console.log("附件", i + 1, ":", fileName); } console.log("所有附件文件:", attachments); return attachments; } catch (error) { console.error("遍历附件文件失败:", error.message); return []; } } // 获取附件文件信息 function getAttachmentInfo(index) { try { var fileName = OCX_OBJ.GetUploadFileAttachItemFile(index); if (fileName) { var fileInfo = { index: index, fileName: fileName, filePath: fileName, fileExtension: fileName.split('.').pop().toLowerCase() }; console.log("附件文件信息:", fileInfo); return fileInfo; } else { console.log("未找到指定索引的附件文件"); return null; } } catch (error) { console.error("获取附件文件信息失败:", error.message); return null; } } ``` -------------------------------- ### Advanced Browser Management Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%B5%8F%E8%A7%88%E5%99%A8%E8%AE%BE%E7%BD%AE%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Handles complex configurations including both domain and IP-based trusted sites with detailed logging. ```javascript // 高级浏览器管理示例 function advancedBrowserManagement() { try { // 浏览器管理配置 var browserConfig = { trustSites: { domains: ["example.com", "api.example.com"], ips: ["192.168.1.100", "localhost"] }, protection: { enabled: true, strictMode: true } }; // 添加域名可信站点 for (var i = 0; i < browserConfig.trustSites.domains.length; i++) { var result = OCX_OBJ.AddDomainToTrustSiteWithReturn(browserConfig.trustSites.domains[i]); console.log("域名可信站点添加结果:", browserConfig.trustSites.domains[i], result); } // 添加IP可信站点 for (var i = 0; i < browserConfig.trustSites.ips.length; i++) { var result = OCX_OBJ.AddDomainToTrustSiteWithReturn(browserConfig.trustSites.ips[i]); console.log("IP可信站点添加结果:", browserConfig.trustSites.ips[i], result); } // 设置保护模式 var protectionResult = OCX_OBJ.SetIEProtectionMode(browserConfig.protection.enabled); console.log("保护模式设置结果:", protectionResult); console.log("高级浏览器管理完成:", browserConfig); } catch (error) { console.error("高级浏览器管理失败:", error.message); } } ``` -------------------------------- ### AddCustomMenuItem Usage Examples Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Demonstrates adding a menu item and a separator to the custom menu. ```javascript // 增加菜单项目 OCX_OBJ.AddCustomMenuItem("创建Word文档", false, false, 1); // 增加分隔符 OCX_OBJ.AddCustomMenuItem(""); ``` -------------------------------- ### FilePageSetup Property Usage Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%9B%BD%E4%BA%A7%E5%8C%96%E7%89%88%E6%9C%AC%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3/%E5%B7%A5%E5%85%B7%E6%A0%8F%E7%9B%B8%E5%85%B3%E5%B1%9E%E6%80%A7.html Controls the availability of the 'Page Setup' file menu item. ```javascript // 设置 Obj.FilePageSetup = {true|false}; // 读取 varObj = Obj.FilePageSetup; ``` ```javascript // 基本用法 var obj = OfficeControlObj; // 允许页面设置 obj.FilePageSetup = true; console.log("页面设置功能已启用"); // 禁止页面设置 obj.FilePageSetup = false; console.log("页面设置功能已禁用"); // 读取页面设置状态 var isFilePageSetupEnabled = obj.FilePageSetup; console.log("页面设置功能状态:", isFilePageSetupEnabled); ``` -------------------------------- ### Setup Security Validation Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E5%AE%89%E5%85%A8%E7%94%B5%E5%AD%90%E5%8D%B0%E7%AB%A0%E9%80%9A%E7%94%A8%E5%B1%9E%E6%80%A7.html Configures the security validation settings for the signing process. ```javascript // 设置安全验证 function setupSecurityValidation() { // 启用强制CRL验证 Obj.IsForceCheckSecSignCertCRLOnline = true; console.log("安全验证设置完成"); } ``` -------------------------------- ### Basic QR Code Addition Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E6%B7%BB%E5%8A%A0%E4%B8%80%E7%BB%B4%E7%A0%81%E4%BA%8C%E7%BB%B4%E7%A0%81%E6%96%B9%E6%B3%95.html Shows how to add multiple QR code types (QRCode and PDF417) in a single function. ```javascript // 基础二维码添加示例 function addBasicQRCode() { try { var ocx = document.getElementById("文档控件ID"); // 添加QRCode二维码 ocx.Add2DCodePic(2, "Hello World", true, 50, 50, 1, 100, 1, true); // 添加PDF417二维码 ocx.Add2DCodePic(1, "PDF417 Data", true, 50, 150, 1, 100, 1, true); console.log("基础二维码添加完成"); } catch (error) { console.error("基础二维码添加失败:", error.message); } } ``` -------------------------------- ### Drive Traversal and Save Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%B0%E5%BB%BA%E3%80%81%E6%89%93%E5%BC%80%E5%92%8C%E4%BF%9D%E5%AD%98%E6%96%87%E6%A1%A3%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Demonstrates iterating through all drives to find a local drive (type 3) with a 'D' label and saving the document to it. ```javascript // 遍历所有驱动器并保存到D盘 for (var i = 0; i < Obj.GetDrivesCount(); i++) { if (Obj.GetDriveType(i) == 3) { // 本地存储设备驱动器 var drivename = Obj.GetDriveName(i).toUpperCase(); if (drivename.indexOf("D") >= 0) { // 判定存在盘符为D的硬盘驱动器 Obj.SaveToLocal(drivename + "1.docx"); } } } ``` -------------------------------- ### Image Positioning and Scaling Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E5%9B%BE%E7%89%87%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Illustrates how to precisely control the placement and scaling of images within the document. ```javascript // 图片定位和缩放示例 function addPositionedImages() { try { // 添加定位图片 OCX_OBJ.AddPicFromLocal( "C:\\images\\watermark.png", // 图片路径 false, // 不提示选择 true, // 浮动图片 200, // 左边距200磅 100, // 上边距100磅 2, // 页边距定位 50, // 缩放50% 0 // 文字下方 ); // 添加缩放图片 OCX_OBJ.AddPicFromURL( "http://example.com/large.jpg", // 图片URL true, // 浮动图片 0, // 左边距 0, // 上边距 1, // 光标位置 25, // 缩放25% 1 // 文字上方 ); console.log("图片定位和缩放完成"); } catch (error) { console.error("图片定位和缩放失败:", error.message); } } ``` -------------------------------- ### Advanced Image Management Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E5%9B%BE%E7%89%87%E6%93%8D%E4%BD%9C%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Shows advanced usage including OCR settings, transparency, and batch local image imports. ```javascript // 高级图片管理示例 function addAdvancedImages() { try { // 添加带OCR识别的图片 OCX_OBJ.AddPicFromLocal("C:\\images\\document.png", false, true, 0, 0, 1, 100, 1, true, false); // 添加透明背景图片 OCX_OBJ.AddPicFromURL("http://example.com/transparent.png", true, 0, 0, 1, 100, 1, false, true); // 添加多张本地图片 OCX_OBJ.AddMultiPicFromLocal(); console.log("高级图片管理完成"); } catch (error) { console.error("高级图片管理失败:", error.message); } } ``` -------------------------------- ### National Standard QR Code Management Example Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E6%B7%BB%E5%8A%A0%E4%B8%80%E7%BB%B4%E7%A0%81%E4%BA%8C%E7%BB%B4%E7%A0%81%E6%96%B9%E6%B3%95.html Demonstrates adding national standard QR codes with and without additional parameter strings. ```javascript // 国标二维码管理示例 function addGBQRCodeManagement() { try { var ocx = document.getElementById("文档控件ID"); // 添加国标二维码(无默认值) ocx.Add2DCodePic(1, "", true, 50, 50, 1, 100, 1, true); // 添加国标二维码(有默认值) ocx.Add2DCodePic(1, "", true, 50, 150, 1, 100, 1, true, "barCodeVer=19900101&barCodeUrgenType=公文&barCodeUrgenLevel=紧急"); console.log("国标二维码管理完成"); } catch (error) { console.error("国标二维码管理失败:", error.message); } } ``` -------------------------------- ### 使用BeginOpenFromURL异步打开文档 Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%9B%BD%E4%BA%A7%E5%8C%96%E7%89%88%E6%9C%AC%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3/%E6%96%B0%E5%BB%BA%E3%80%81%E6%89%93%E5%BC%80%E5%92%8C%E4%BF%9D%E5%AD%98%E6%96%87%E6%A1%A3%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html 以异步方式从URL加载文档,支持配置进度条显示、只读模式及文档类型。在Linux环境下建议优先使用OpenFromURL。 ```javascript // 基本用法 var obj = OfficeControlObj; // 异步打开URL文档 obj.BeginOpenFromURL("http://example.com/document.docx"); console.log("开始异步打开文档"); // 异步打开只读文档 obj.BeginOpenFromURL("http://example.com/document.docx", true, true); console.log("开始异步打开只读文档"); // 异步打开指定类型文档 obj.BeginOpenFromURL("http://example.com/document", true, false, "Word.Document"); console.log("开始异步打开指定类型文档"); ``` -------------------------------- ### Check PDFCreator Installation Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E9%80%9A%E7%94%A8%E6%96%B9%E6%B3%95.html Determines if the PDFCreator converter is installed on the local machine. Use this before calling SaveAsPDFFile or PublishAsPDFToURL to ensure the conversion environment is ready. ```javascript IsPDFCreatorInstalled() ``` ```javascript // 检查PDFCreator是否安装 if (OCX_OBJ.IsPDFCreatorInstalled()) { OCX_OBJ.SaveAsPDFFile("D:\\document.pdf"); } else { console.log("请先安装PDFCreator"); } ``` -------------------------------- ### GetOfficeVer Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E9%80%9A%E7%94%A8%E6%96%B9%E6%B3%95.html Retrieves the version of the installed Microsoft Office. ```APIDOC ## GetOfficeVer() ### Description Returns the version number of the Microsoft Office installed on the client machine. ### Returns - **Number** - Version code (e.g., 16 for Office 2016, 100 for not installed). ### Usage Example ```javascript var officeVer = OCX_OBJ.GetOfficeVer(); ``` ``` -------------------------------- ### IsPDFCreatorInstalled Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E9%80%9A%E7%94%A8%E6%96%B9%E6%B3%95.html Checks if the PDFCreator converter is installed on the local machine. ```APIDOC ## IsPDFCreatorInstalled() ### Description Checks if the PDFCreator converter is installed on the local machine. Returns true if installed, false otherwise. ### Returns - **Boolean** - true if installed, false if not installed. ``` -------------------------------- ### BeginOpenFromURL(URL, [IsShowProgress], [ReadOnly], [ProgId]) Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%9B%BD%E4%BA%A7%E5%8C%96%E7%89%88%E6%9C%AC%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3/%E6%96%B0%E5%BB%BA%E3%80%81%E6%89%93%E5%BC%80%E5%92%8C%E4%BF%9D%E5%AD%98%E6%96%87%E6%A1%A3%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html 以异步方式开始从URL打开文档。下载完成后会触发相关事件。 ```APIDOC ## BeginOpenFromURL(URL, [IsShowProgress], [ReadOnly], [ProgId]) ### 功能 以异步方式开始打开URL文档。 ### 参数 - **URL** (string) - 必选 - 处理后台打开的URL地址 - **IsShowProgress** (bool) - 可选 - 是否显示进度条 - **ReadOnly** (bool) - 可选 - 是否只读打开 - **ProgId** (string) - 可选 - 文档类型 ### 使用示例 ```javascript var obj = OfficeControlObj; obj.BeginOpenFromURL("http://example.com/document.docx", true, true); ``` ``` -------------------------------- ### GetOfficeSpVer Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E9%80%9A%E7%94%A8%E6%96%B9%E6%B3%95.html Retrieves the Service Pack version of the installed Office. ```APIDOC ## GetOfficeSpVer() ### Description Returns the Service Pack version information for the installed Office suite. ### Usage Example ```javascript var spVer = OCX_OBJ.GetOfficeSpVer(); ``` ``` -------------------------------- ### GetOfficeBinaryBitType Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E9%80%9A%E7%94%A8%E6%96%B9%E6%B3%95.html Retrieves the binary bit type (32-bit or 64-bit) of the installed Office. ```APIDOC ## GetOfficeBinaryBitType() ### Description Returns the architecture of the installed Office. ### Returns - **Number** - 0: Not installed, 1: 32-bit, 2: 64-bit. ### Usage Example ```javascript var bitType = OCX_OBJ.GetOfficeBinaryBitType(); ``` ``` -------------------------------- ### GetWPSIsProfessinalVer Method Usage Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E9%80%9A%E7%94%A8%E6%96%B9%E6%B3%95.html Checks if the installed WPS version is the professional edition. ```javascript // 判断WPS是否为专业版 var isPro = OCX_OBJ.GetWPSIsProfessinalVer(); if (isPro) { console.log("WPS专业版"); } else { console.log("WPS个人版"); } ``` -------------------------------- ### GetWPSVer Method Usage Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E9%80%9A%E7%94%A8%E6%96%B9%E6%B3%95.html Retrieves the version of the installed WPS Office suite. ```javascript // 获取WPS版本 var wpsVer = OCX_OBJ.GetWPSVer(); console.log("WPS版本:", wpsVer); ``` -------------------------------- ### Initialize EKEY Settings Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/EKEY%E6%8E%A7%E5%88%B6%E7%9B%B8%E5%85%B3%E5%B1%9E%E6%80%A7.html Configures the EKEY type and enables the hardware check mechanism. ```javascript // 初始化EKEY设置 function initializeEkey() { // 设置EKEY类型 Obj.EkeyType = 1; // 根据实际使用的EKEY类型设置 // 启用EKEY检查 Obj.IsCheckEkey = true; console.log("EKEY初始化完成"); } ``` -------------------------------- ### GetOfficeBinaryBitType Method Usage Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E9%80%9A%E7%94%A8%E6%96%B9%E6%B3%95.html Determines whether the installed Office is 32-bit or 64-bit. ```javascript // 获取Office位数 var bitType = OCX_OBJ.GetOfficeBinaryBitType(); if (bitType === 1) { console.log("32位Office"); } else if (bitType === 2) { console.log("64位Office"); } else { console.log("未安装Office"); } ``` -------------------------------- ### GetOfficeVer Method Usage Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E9%80%9A%E7%94%A8%E6%96%B9%E6%B3%95.html Retrieves the version of the installed Microsoft Office suite. ```javascript // 获取Office版本 var officeVer = OCX_OBJ.GetOfficeVer(); console.log("Office版本:", officeVer); // 根据版本判断兼容性 if (officeVer >= 12) { console.log("支持Office 2007及以上版本"); } else if (officeVer >= 11) { console.log("支持Office 2003版本"); } else { console.log("Office版本过低或未安装"); } ``` -------------------------------- ### Implement HTTP Communication Best Practices Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E8%87%AA%E5%AE%9A%E4%B9%89%E9%80%9A%E8%AE%AF%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Demonstrates how to configure headers, reset existing settings, and execute web requests using the NTKO control object. ```javascript // HTTP通讯最佳实践 function httpCommunicationBestPractice() { try { // HTTP通讯配置 var httpConfig = { baseUrl: "http://example.com/api", headers: { "Authorization": "Bearer token123", "Content-Type": "application/json", "User-Agent": "NTKO-Office-Control/1.0" }, timeout: 30000 }; // 应用HTTP配置 function applyHTTPConfig() { try { // 清除现有头信息 OCX_OBJ.HTTPHeaderReset(); // 添加配置的头信息 for (var header in httpConfig.headers) { OCX_OBJ.AddHTTPHeader(header + ": " + httpConfig.headers[header]); } console.log("HTTP配置应用成功"); } catch (error) { console.error("应用HTTP配置失败:", error.message); } } // 执行HTTP通讯 function executeHTTPCommunication() { try { // 执行GET请求 var data = OCX_OBJ.DoWebGet(httpConfig.baseUrl + "/data"); // 执行POST请求 var params = "action=update&data=" + encodeURIComponent(JSON.stringify({test: "value"})); var result = OCX_OBJ.DoWebExecute2(httpConfig.baseUrl + "/update", params); console.log("HTTP通讯执行成功:", { data, result }); } catch (error) { handleHTTPError('DoWebGet', error); } } // 应用配置并执行通讯 applyHTTPConfig(); executeHTTPCommunication(); } catch (error) { console.error("HTTP通讯最佳实践失败:", error.message); } } ``` -------------------------------- ### Get Current Page Number Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/PDF%E6%8F%92%E4%BB%B6%E4%B8%BB%E8%A6%81%E6%96%B9%E6%B3%95%E5%8F%82%E8%80%83.html Retrieves the index of the currently displayed page. ```javascript GetCurPageStart() ``` ```javascript // 基本用法 var plugInObj = OfficeControlObj.ActiveDocument; // 获取当前页码 var currentPage = plugInObj.GetCurPageStart(); console.log("当前页码:", currentPage); ``` -------------------------------- ### IsExitOfficeProcessWhenClose Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E4%BF%A1%E6%81%AF%E5%92%8C%E8%A1%8C%E4%B8%BA%E6%8E%A7%E5%88%B6%E7%9B%B8%E5%85%B3%E5%B1%9E%E6%80%A7.html Gets or sets whether to terminate the Office process when the document is closed. ```APIDOC ## Property: IsExitOfficeProcessWhenClose ### Description Controls the lifecycle of the Office process upon document closure. ### Type Boolean (Read/Write) ### Usage ```javascript // Set Obj.IsExitOfficeProcessWhenClose = true; // or false // Get var exitProcess = Obj.IsExitOfficeProcessWhenClose; ``` ``` -------------------------------- ### Complete EKEY Management Workflow Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/EKEY%E6%8E%A7%E5%88%B6%E7%9B%B8%E5%85%B3%E5%B1%9E%E6%80%A7.html Demonstrates the full lifecycle of EKEY management, including setting the type, enabling checks, and verifying connection status asynchronously. ```javascript // 完整的EKEY管理功能 function manageEkey() { try { // 1. 设置EKEY类型 Obj.EkeyType = 1; // 海泰 // 2. 启用EKEY检查 Obj.IsCheckEkey = true; // 3. 等待一段时间让系统检测 setTimeout(function() { // 4. 检查连接状态 var isConnected = Obj.IsEkeyConnected; var ekeySN = Obj.EkeySN; if (isConnected) { console.log("EKEY管理成功:"); console.log("类型:", Obj.EkeyType); console.log("连接状态: 已连接"); console.log("序列号:", ekeySN); } else { console.log("EKEY未连接,请检查:"); console.log("1. EKEY是否插入"); console.log("2. 驱动是否安装"); console.log("3. EKEY类型是否正确"); } }, 1000); } catch (error) { console.error("EKEY管理失败:", error.message); } } ``` -------------------------------- ### Button State Management Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E5%9C%A8%E8%8F%9C%E5%8D%95%E4%B8%8A%E6%B7%BB%E5%8A%A0%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8C%89%E9%92%AE%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Example of polling the document state to manage button availability. ```javascript // 状态管理最佳实践 function stateManagementBestPractice() { try { // 根据文档状态管理按钮 function updateButtonStates() { var docType = TANGER_OCX_OBJ.DocType; if (docType === 0) { // 没有文档时,某些按钮不可用 // 注意:这里只是示例,实际状态由IsNeedOpenDoc参数控制 console.log("没有文档,某些按钮将不可用"); } else { // 有文档时,所有按钮可用 console.log("有文档,所有按钮可用"); } } // 定期更新按钮状态 setInterval(updateButtonStates, 1000); console.log("状态管理设置完成"); } catch (error) { console.error("状态管理设置失败:", error.message); } } ``` -------------------------------- ### Basic Menu Event Handling Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E8%8F%9C%E5%8D%95%E7%9B%B8%E5%85%B3%E4%BA%8B%E4%BB%B6.html Demonstrates the fundamental structure for capturing file, custom, and context menu events. ```javascript // 基本菜单事件处理流程 function basicMenuEventHandling() { // 文件菜单事件处理 function handleFileCommand(cmd, canceled) { console.log("文件命令:", cmd); // 处理文件命令 } // 自定义菜单事件处理 function handleCustomMenu(menuPos, submenuPos, subsubmenuPos, menuCaption, myMenuID) { console.log("自定义菜单:", menuCaption); // 处理自定义菜单 } // 右键菜单事件处理 function handleContextMenu(menuIndex) { console.log("右键菜单:", menuIndex); // 处理右键菜单 } } ``` ```javascript // 基础菜单事件处理示例 function basicMenuEventHandling() { // 文件菜单处理 function onFileCommand(cmd, canceled) { console.log("文件命令:", cmd); // 处理文件命令 } // 自定义菜单处理 function onCustomMenu(menuPos, submenuPos, subsubmenuPos, menuCaption, myMenuID) { console.log("自定义菜单:", menuCaption); // 处理自定义菜单 } } ``` -------------------------------- ### EnableCustomMenuItem2 Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%9B%BD%E4%BA%A7%E5%8C%96%E7%89%88%E6%9C%AC%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3/%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html 用来禁用或者允许使用某个菜单项目。 ```APIDOC ## EnableCustomMenuItem2(menuPos, subMenuPos, subsubMenuPos, bEnabled) ### 功能 用来禁用或者允许使用某个菜单项目。 ### 参数 - **menuPos** (long) - 必选 - 菜单的位置,取值0-9 - **subMenuPos** (long) - 必选 - 二级菜单位置,取值0-39 - **subsubMenuPos** (long) - 必选 - 三级菜单位置,取值-1-48 - **bEnabled** (bool) - 必选 - 是否禁用指定的菜单项目 ### 示例代码 ```javascript // 禁用菜单项 OCX_OBJ.EnableCustomMenuItem2(0, 0, -1, false); // 禁用二级菜单项 OCX_OBJ.EnableCustomMenuItem2(0, 1, 0, false); // 禁用三级菜单项 // 启用菜单项 OCX_OBJ.EnableCustomMenuItem2(0, 0, -1, true); // 启用二级菜单项 OCX_OBJ.EnableCustomMenuItem2(0, 1, 0, true); // 启用三级菜单项 ``` ``` -------------------------------- ### GetOfficeSpVer Method Usage Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E9%80%9A%E7%94%A8%E6%96%B9%E6%B3%95.html Retrieves the Service Pack version of the installed Microsoft Office. ```javascript // 获取Office SP版本 var spVer = OCX_OBJ.GetOfficeSpVer(); console.log("Office SP版本:", spVer); ``` -------------------------------- ### Open Document Methods Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%B0%E5%BB%BA%E3%80%81%E6%89%93%E5%BC%80%E5%92%8C%E4%BF%9D%E5%AD%98%E6%96%87%E6%A1%A3%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Demonstrates both synchronous and asynchronous methods for opening documents from a URL. ```javascript // 打开文档 function openDocument() { try { // 同步打开URL文档 Obj.OpenFromURL("/document.doc"); console.log("文档打开成功"); // 可以立即访问ActiveDocument Obj.ActiveDocument.ShowRevisions = false; } catch (error) { console.error("打开文档失败:", error.message); } } // 异步打开文档 function openDocumentAsync() { try { // 异步打开URL文档 Obj.BeginOpenFromURL("/document.doc"); console.log("开始下载文档"); } catch (error) { console.error("开始下载文档失败:", error.message); } } ``` -------------------------------- ### 在HTML页面引入ntkobackground.min.js Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6PLUS%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97%28%E8%B7%A8%E6%B5%8F%E8%A7%88%E5%99%A8%29/%E9%9B%86%E6%88%90%E6%AD%A5%E9%AA%A4.html 在index.html的body标签中引入ntkobackground.min.js,用于支持跨浏览器文档窗口操作。 ```html
``` -------------------------------- ### Get Total Page Count Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/PDF%E6%8F%92%E4%BB%B6%E4%B8%BB%E8%A6%81%E6%96%B9%E6%B3%95%E5%8F%82%E8%80%83.html Retrieves the total number of pages in the current document. ```javascript GetPagesCount() ``` ```javascript // 基本用法 var plugInObj = OfficeControlObj.ActiveDocument; // 获取总页数 var pageCount = plugInObj.GetPagesCount(); console.log("文档总页数:", pageCount); ``` -------------------------------- ### Create New Document Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%B0%E5%BB%BA%E3%80%81%E6%89%93%E5%BC%80%E5%92%8C%E4%BF%9D%E5%AD%98%E6%96%87%E6%A1%A3%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95.html Initializes a new document instance using the CreateNew method. ```javascript // 创建新文档 function createNewDocument() { try { // 创建新的Word文档 Obj.CreateNew("Word.Document"); console.log("新文档创建成功"); } catch (error) { console.error("创建文档失败:", error.message); } } ``` -------------------------------- ### 设置或读取IsExitOfficeProcessWhenClose属性 Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/%E6%96%87%E6%A1%A3%E4%BF%A1%E6%81%AF%E5%92%8C%E8%A1%8C%E4%B8%BA%E6%8E%A7%E5%88%B6%E7%9B%B8%E5%85%B3%E5%B1%9E%E6%80%A7.html 控制关闭文档时是否强制结束Office进程。 ```javascript // 设置 Obj.IsExitOfficeProcessWhenClose = true; // 或 false // 读取 var exitProcess = Obj.IsExitOfficeProcessWhenClose; ``` -------------------------------- ### Get PDF Custom Bookmark Name Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/PDF%E6%8F%92%E4%BB%B6%E7%9B%B8%E5%85%B3%E6%8E%A5%E5%8F%A3.html Retrieve the name of a user-defined bookmark by its index. ```javascript // 读取 var bookmarkName = Obj.PdfCustomBookmarksName(index); ``` ```javascript // 获取指定索引的书签名称 var bookmarkName = Obj.PdfCustomBookmarksName(0); console.log("书签名称:", bookmarkName); ``` -------------------------------- ### 添加自定义工具栏按钮 Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%9B%BD%E4%BA%A7%E5%8C%96%E7%89%88%E6%9C%AC%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3/%E8%87%AA%E5%AE%9A%E4%B9%89%E5%B7%A5%E5%85%B7%E6%A0%8F%E6%B7%BB%E5%8A%A0%E6%8C%89%E9%92%AE.html 通过AddCustomToolButton方法添加按钮,支持设置按钮文字和内置图片索引。注意Linux版本暂不支持ImgIndex参数。 ```javascript // 添加带文字和图片的按钮 OCX_OBJ.AddCustomToolButton("新建(0)", -1); OCX_OBJ.AddCustomToolButton("word", 0); OCX_OBJ.AddCustomToolButton("", 0); OCX_OBJ.AddCustomToolButton("拷贝(1)", -1); OCX_OBJ.AddCustomToolButton("", 1); OCX_OBJ.AddCustomToolButton("剪切(2)", -1); OCX_OBJ.AddCustomToolButton("", 2); OCX_OBJ.AddCustomToolButton("保存(3)", -1); OCX_OBJ.AddCustomToolButton("", 3); OCX_OBJ.AddCustomToolButton("另存为(4)", -1); OCX_OBJ.AddCustomToolButton("", 4); ``` -------------------------------- ### General Utility and Lifecycle Methods Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%9B%BD%E4%BA%A7%E5%8C%96%E7%89%88%E6%9C%AC%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3/%E4%BD%BF%E7%94%A8JavaScript%E5%93%8D%E5%BA%94%E6%8E%A7%E4%BB%B6%E4%BA%8B%E4%BB%B6.html Helper methods for managing UI state, document configuration, and resource cleanup. ```javascript // 更新UI状态 updateUIState(state) { console.log("更新UI状态:", state); // 实现UI状态更新逻辑 } // 加载文档配置 loadDocumentConfig(file) { console.log("加载文档配置:", file); // 实现文档配置加载逻辑 } // 初始化文档 initializeDocument(doc) { console.log("初始化文档:", doc); // 实现文档初始化逻辑 } // 保存用户设置 saveUserSettings() { console.log("保存用户设置"); // 实现用户设置保存逻辑 } // 清理资源 cleanupResources() { console.log("清理资源"); // 实现资源清理逻辑 } // 显示成功消息 showSuccessMessage(message) { console.log("成功消息:", message); // 实现成功消息显示逻辑 } // 显示错误消息 showErrorMessage(message) { console.error("错误消息:", message); // 实现错误消息显示逻辑 } ``` -------------------------------- ### Handle OnClickHyperLink Event Source: https://www.ntko.com/docs/%E8%BD%AF%E8%88%AAOFFICE%E6%96%87%E6%A1%A3%E6%8E%A7%E4%BB%B6%E5%BC%80%E5%8F%91%E6%8E%A5%E5%8F%A3%E5%8F%82%E8%80%83/WORD%E5%8F%8AWPS%E7%9B%B8%E5%85%B3%E4%BA%8B%E4%BB%B6.html Examples demonstrating how to intercept hyperlink clicks using the OnClickHyperLink event in JScript. ```javascript // 基本用法 ``` ```javascript // 处理链接点击 ``` ```javascript // 自定义链接处理 ```