# DOCXviewer 用于在前端界面中嵌入并渲染 `.docx`(Word 文档)文件的容器控件,继承自 `VBox`。通过 `mammoth.js` 将二进制 Word 文档转换为 HTML 并显示在页面中。 ## 主要方法 - **`set_url(url)`** 异步方法,接收一个文档 URL,使用 `HttpArrayBuffer` 获取二进制数据,并通过 `mammoth.convertToHtml` 转换为 HTML 后插入到控件的 DOM 中。 ## 主要事件 - **`on_parent`** 当控件被挂载到父级组件时触发,自动调用 `set_url(this.url)` 开始加载文档内容。 ## 源码例子 ```json { "id": "docx_viewer_1", "widgettype": "DOCXviewer", "options": { "url": "/documents/report.docx" // 要加载的 .docx 文件路径 }, "binds": [ { "actiontype": "bricks", "wid": "btn_refresh_docx", "event": "click", "target": "docx_viewer_1", "options": { "widgettype": "method", "method": "set_url", "params": { "url": "/documents/report_updated.docx" } }, "rtdata": {}, "conform": { "title": "刷新确认", "message": "确定要重新加载文档吗?", "confirm_text": "确定", "cancel_text": "取消" } } ] } ``` > 注释: > - `widgettype: DOCXviewer` 表示这是一个基于 Mammoth.js 渲染 Word 文档的控件。 > - `options.url` 指定远程 `.docx` 文件地址。 > - 使用 `binds` 可以绑定按钮点击事件来动态更新文档源。 > - 需提前引入 [mammoth.js](https://github.com/mwilliamson/mammoth.js) 库支持。 --- # EXCELviewer 用于在 Web 界面中展示 `.xlsx` 或 `.xls` Excel 文件内容的容器控件,继承自 `VBox`。支持多工作表切换查看,依赖 `SheetJS (xlsx)` 库解析 Excel 数据并渲染为 HTML 表格。 ## 主要方法 - **`set_url(url)`** 异步方法,根据传入的 Excel 文件 URL 加载二进制数据,使用 `XLSX.read()` 解析工作簿,并生成页签栏供用户切换不同 sheet。 - **`show_sheet_by_name(sheetname, tw)`** 切换显示指定名称的工作表,高亮当前选中标签,并将对应表格内容渲染至滚动面板中。 ## 主要事件 - **`on_parent`** 控件挂载后触发,自动调用 `set_url(this.url)` 初始化数据加载。 - **`click` on tab text widget** 点击某个工作表标签时,切换显示该工作表内容。 ## 源码例子 ```json { "id": "excel_viewer_1", "widgettype": "EXCELviewer", "options": { "url": "/data/sales_report.xlsx", // Excel 文件地址 "height": "600px" }, "subwidgets": [], "binds": [ { "actiontype": "method", "wid": "btn_load_another_excel", "event": "click", "target": "excel_viewer_1", "method": "set_url", "params": { "url": "/data/inventory.xlsx" }, "conform": { "title": "加载新文件", "message": "是否加载新的库存表格?" } } ] } ``` > 注释: > - `EXCELviewer` 自动创建顶部可滚动的 sheet 标签栏和下方内容区。 > - 每个标签是一个 `Text` 控件,带有 `'clickable'` 和 `'selected'` CSS 类控制样式。 > - 内容使用 `XLSX.utils.sheet_to_html` 直接生成表格 HTML 插入 `VScrollPanel` 实现滚动。 > - 必须确保全局已加载 `xlsx.full.min.js`(如 SheetJS)。 --- # PDFviewer 用于在前端展示 `.pdf` 文件的容器控件,继承自 `VBox`。利用 `pdfjsLib`(Mozilla PDF.js)解析 PDF 二进制流,并逐页渲染为 `` 元素进行显示。 ## 主要方法 - **`set_url(url)`** 异步方法,从指定 URL 获取 PDF 二进制数据,初始化 `pdfjsLib.getDocument` 并遍历所有页面进行渲染。 - **`add_page_content(page)`** 接收一个 PDF 页面对象,创建 canvas 元素并调用 `page.render()` 绘制可视内容,添加到控件中。 ## 主要事件 - **`on_parent`** 控件挂载完成后触发,启动 PDF 加载流程。 ## 源码例子 ```json { "id": "pdf_viewer_1", "widgettype": "PDFviewer", "options": { "url": "/docs/manual.pdf", // PDF 文件路径 "width": "100%", "height": "800px" }, "binds": [ { "actiontype": "script", "wid": "btn_print_pdf", "event": "click", "target": "Popup", "script": "window.open(target.options.url, '_blank', 'print=yes');", "params": { "target": "pdf_viewer_1" }, "rtdata": { "msg": "正在打开打印窗口..." } }, { "actiontype": "method", "wid": "btn_reload_pdf", "event": "click", "target": "pdf_viewer_1", "method": "set_url", "params": { "url": "{{last_pdf_url}}" // 动态参数,来自运行时数据或变量 } } ] } ``` > 注释: > - `PDFviewer` 使用 `pdfjsLib` 的标准 API 加载和渲染 PDF。 > - 每页生成一个 `` 并插入控件内部,页间可用 `Splitter` 分隔(代码中逻辑未完全闭合,需注意循环变量作用域)。 > - 需引入 PDF.js 并设置 `pdfjsLib.GlobalWorkerOptions.workerSrc`。 > - 示例中使用 `script` 动作实现“打印”功能,弹出新窗口预览 PDF。 > - `{{last_pdf_url}}` 表示支持模板变量注入,可用于动态刷新最近访问的文档。 --- > ✅ 所有三个控件均为**容器控件**,均继承自 `VBox`,可通过 `add_widget` 动态添加子控件。 > ⚠️ 使用前请确保相关第三方库已正确加载: > - DOCXviewer → `mammoth` > - EXCELviewer → `xlsx` > - PDFviewer → `pdfjsLib`