Skip to content
全新发布

PDF SDK 与 AI 文档处理

在 GitHub 获取完整的私有化部署SDK 包及 AI 智能文档处理能力,一键部署,快速构建您的文档处理工作流。

UI 定制

ComPDFKit WebViewer UI 完全可定制。本页是常见定制任务的枢纽,每个链接的指南都包含 API 签名和示例的深入说明。

查看器初始化后,公共定制接口位于 instance.UI

javascript
const { UI } = window.instance;

定制一览

任务API指南
添加/移除/重排工具栏按钮UI.setHeaderItems(callback)头部与工具栏
切换当前工具栏分组UI.setToolbarGroup(group)头部与工具栏
添加自定义左/右面板UI.addPanel(panel)面板
替换所有面板UI.setPanels(panels)面板
打开/关闭面板或对话框UI.openElement / UI.closeElement显示/隐藏元素
隐藏/显示按钮(从 DOM 卸载)UI.disableElements / UI.enableElements显示/隐藏元素
切换主题UI.setTheme('dark')主题与样式
注入自定义 CSSUI.setCustomStyle(css)主题与样式
切换语言UI.setLanguage('zh-CN')本地化
添加语言UI.addLanguage(lang)本地化
注册自定义弹窗UI.addCustomModal(options)自定义弹窗
定制右键菜单UI.annotationPopupUI.textPopup弹出菜单
激活工具UI.setActiveTool(dataElement)工具
注册自定义工具UI.registerTool(tool, options)工具

元素模型

UI 中几乎每个可见部件——面板、对话框、工具栏按钮——都由一个 data-element 字符串标识。这些标识符集中定义在 packages/webview/src/constants/dataElements.js,并作为键贯穿 Pinia store(activeElementsdisabledElementsactiveElementsTab)。

这意味着有三类 API 控制可见性:

  • 打开/关闭openElementcloseElement)——切换元素当前是否显示(例如打开左面板)。
  • 启用/禁用enableElementsdisableElements)——将元素从 DOM 中挂载或完全卸载。禁用工具栏按钮会移除它,但不会禁用底层功能。
  • 活动标签页setActiveElementTab)——切换带标签页元素内的活动子标签(例如显示左面板的哪个标签)。

详见 显示/隐藏元素

工具栏模型

工具栏在 viewer store 的 headers 状态中声明式定义——一个 工具栏分组 → 项数组的映射。分组包括 default(主顶部栏)以及 toolbarGroup-ViewtoolbarGroup-AnnotationtoolbarGroup-FormtoolbarGroup-MeasurementtoolbarGroup-SigntoolbarGroup-SecuritytoolbarGroup-RedactiontoolbarGroup-ComparetoolbarGroup-EditortoolbarGroup-DocumenttoolbarGroup-Separation

每一项是一个描述符,含 typetoolButtonactionButtontoggleElementButtonstatefulButtoncustomElementdividerspacer)、dataElementicononClick(viewerStore, documentStore) 处理函数。UI.setHeaderItems(callback) 交给你一个可变的 Header 对象,提供链式 DSL(getgetHeaderinsertBeforeinsertAfterdeletepushpopunshiftshiftupdate)来修改这些数组。

详见 头部与工具栏

面板模型

面板通过通用的 Panel.vue 外壳渲染,并在 viewer store 的 genericPanels 列表中声明。默认集合包括 leftPanelrightPanelstylePanelpageModePanelstampPanellinkPanelcontentEditorPanelcolorSeparationPanelredactionPanel。通过 UI.addPanel 添加的自定义面板通过相同外壳渲染,其 render 函数返回一个 HTMLElement

详见 面板

常见配方

隐藏打印和下载按钮

javascript
UI.disableElements(['printButton', 'downloadButton']);

打开左面板并切换到缩略图标签

javascript
UI.openElement('leftPanel');
UI.setActiveElementTab('leftPanel', 'ThumbnailsButton'); // THUMBS 标签

添加自定义工具栏按钮

javascript
UI.setHeaderItems(header => {
  header.getHeader('default').push({
    type: 'actionButton',
    dataElement: 'my-export-btn',
    label: 'Export',
    onClick: () => { /* … */ },
  });
});

切换到深色主题和中文

javascript
UI.setTheme('dark');
UI.setLanguage('zh-CN');

添加自定义右侧面板

javascript
UI.addPanel({
  dataElement: 'myPanel',
  location: 'right',
  render: () => {
    const el = document.createElement('div');
    el.textContent = 'Hello from my panel';
    return el;
  },
});
UI.openElement('myPanel');

高级定制

由于完整 UI 源码开源,你可以超越运行时 API:fork 仓库并直接修改组件、store 或工具栏定义。组件状态管理 指南描述了你会接触到的内部结构。

下一步