@7niao/doc-previewer 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +217 -2
- package/dist/assets/ArchiveRenderer-BZsm87A2.js +514 -0
- package/dist/assets/CadRenderer-DQiBmk71.js +1838 -0
- package/dist/assets/DocxRenderer-6BCR0R9L.js +3173 -0
- package/dist/assets/GisRenderer-BQ_T-z1A.js +9758 -0
- package/dist/assets/ImageRenderer-D1SFZkV3.js +24 -0
- package/dist/assets/MediaRenderer-DKj0V7cL.js +66 -0
- package/dist/assets/Model3dRenderer-DDk-HsYP.js +1966 -0
- package/dist/assets/OfdRenderer-1kDqHPDa.js +67 -0
- package/dist/assets/PdfRenderer-DuZpWPAu.js +16370 -0
- package/dist/assets/PptxRenderer-BSoVSGOz.js +48492 -0
- package/dist/assets/TextRenderer-pKpgA2wF.js +38 -0
- package/dist/assets/UnsupportedRenderer-CnjuGXg3.js +29 -0
- package/dist/assets/XlsxRenderer-Bohk5iIA.js +16257 -0
- package/dist/assets/_plugin-vue_export-helper-Djzt4Yr7.js +7 -0
- package/dist/assets/createLucideIcon-C_l8giLP.js +91 -0
- package/dist/assets/dom-Ba50_9e0.js +93 -0
- package/dist/assets/dwg2dxf-wasm-DO6Y5cnM.js +2148 -0
- package/dist/assets/file-question-mark-D7iJe3UN.js +21 -0
- package/dist/assets/jszip.min-OjSHaKmg.js +3039 -0
- package/dist/assets/ofd.es-CauEO04U.js +24255 -0
- package/dist/assets/rolldown-runtime-CwxnZyOB.js +22 -0
- package/dist/assets/three.module-B04XcvCz.js +12454 -0
- package/dist/assets/types-CVtHVd2P.js +168 -0
- package/dist/index.js +725 -0
- package/dist/libarchive/libarchive.wasm +0 -0
- package/dist/libarchive/worker-bundle.js +6 -0
- package/dist/style.css +2 -0
- package/dist/types/FileViewer.vue.d.ts +48 -0
- package/dist/types/components/PreviewToolbar.vue.d.ts +33 -0
- package/dist/types/composables/useFullscreen.d.ts +6 -0
- package/dist/types/composables/usePreviewSource.d.ts +14 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/renderers/ArchiveRenderer.vue.d.ts +18 -0
- package/dist/types/renderers/CadRenderer.vue.d.ts +29 -0
- package/dist/types/renderers/DocxRenderer.vue.d.ts +16 -0
- package/dist/types/renderers/GisRenderer.vue.d.ts +26 -0
- package/dist/types/renderers/ImageRenderer.vue.d.ts +16 -0
- package/dist/types/renderers/MediaRenderer.vue.d.ts +17 -0
- package/dist/types/renderers/Model3dRenderer.vue.d.ts +29 -0
- package/dist/types/renderers/OfdRenderer.vue.d.ts +16 -0
- package/dist/types/renderers/PdfRenderer.vue.d.ts +16 -0
- package/dist/types/renderers/PptxRenderer.vue.d.ts +16 -0
- package/dist/types/renderers/TextRenderer.vue.d.ts +16 -0
- package/dist/types/renderers/UnsupportedRenderer.vue.d.ts +14 -0
- package/dist/types/renderers/XlsxRenderer.vue.d.ts +16 -0
- package/dist/types/types.d.ts +51 -0
- package/dist/types/utils/detect.d.ts +10 -0
- package/dist/types/utils/dom.d.ts +13 -0
- package/dist/types/vendor/asn1js-stub.d.ts +10 -0
- package/package.json +77 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 7niao
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
10
|
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
11
|
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
12
|
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
13
|
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
14
|
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
15
|
+
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,218 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @7niao/doc-previewer(Trae CN + DeepSeek-v4.1-Flash)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
基于 Vue 3 + TypeScript 的通用文件预览组件。按文件类型自动选择渲染器并按需懒加载,内置缩放、旋转、下载、打印、全屏与画布拖拽平移,可作为一个独立组件接入任意 Vue 3 项目。
|
|
4
|
+
|
|
5
|
+
## 特性
|
|
6
|
+
|
|
7
|
+
- 覆盖常见办公与工程格式:图片、音视频、PDF、Word(docx)、Excel(xlsx)、PPT(pptx)、OFD、CAD(dwg/dxf)、3D 模型(glb/gltf)、GIS(kml/kmz/shp/geojson)、压缩包(zip/rar/7z/tar)。
|
|
8
|
+
- 统一输入:`File`、`Blob` 或可访问的远程 URL。
|
|
9
|
+
- 工具栏:缩小 / 放大 / 复位、左旋 / 右旋、下载、打印、全屏;按格式自动禁用无意义的操作。
|
|
10
|
+
- 画布拖拽:内容超出视口时按住鼠标左键即可平移,光标自动切换为“抓手”。
|
|
11
|
+
- 按格式懒加载渲染器,未用到的重型依赖不会进入首屏。
|
|
12
|
+
- 压缩包支持条目浏览、密码输入,并可对单个条目嵌套预览。
|
|
13
|
+
- 完整 TypeScript 类型声明,同时提供演示站点与示例文件。
|
|
14
|
+
|
|
15
|
+
## 安装
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm add @7niao/doc-previewer
|
|
19
|
+
# 或
|
|
20
|
+
npm install @7niao/doc-previewer
|
|
21
|
+
yarn add @7niao/doc-previewer
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`vue` 为 peer 依赖,需要宿主项目已安装 `vue@^3.4`。发布产物为 ESM,适用于 Vite、Webpack 5、Rollup 等现代打包器。
|
|
25
|
+
|
|
26
|
+
## 快速开始
|
|
27
|
+
|
|
28
|
+
### 引入样式
|
|
29
|
+
|
|
30
|
+
组件库的样式(含 Leaflet 地图样式)统一抽取到 `style.css`,只需引入一次:
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
// main.ts
|
|
34
|
+
import '@7niao/doc-previewer/style.css'
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 局部使用
|
|
38
|
+
|
|
39
|
+
```vue
|
|
40
|
+
<script setup lang="ts">
|
|
41
|
+
import { FileViewer } from '@7niao/doc-previewer'
|
|
42
|
+
import { ref } from 'vue'
|
|
43
|
+
|
|
44
|
+
const file = ref<File | string>('https://example.com/report.pdf')
|
|
45
|
+
|
|
46
|
+
const options = {
|
|
47
|
+
height: '640px',
|
|
48
|
+
showFileInfo: true,
|
|
49
|
+
zoom: { min: 0.1, max: 8, step: 0.2 },
|
|
50
|
+
}
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<template>
|
|
54
|
+
<FileViewer
|
|
55
|
+
:src="file"
|
|
56
|
+
file-name="report.pdf"
|
|
57
|
+
:options="options"
|
|
58
|
+
@ready="kind => console.log('渲染完成', kind)"
|
|
59
|
+
@error="message => console.error(message)"
|
|
60
|
+
/>
|
|
61
|
+
</template>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 通过 ref 调用
|
|
65
|
+
|
|
66
|
+
```vue
|
|
67
|
+
<script setup lang="ts">
|
|
68
|
+
import { FileViewer } from '@7niao/doc-previewer'
|
|
69
|
+
import { ref } from 'vue'
|
|
70
|
+
|
|
71
|
+
const file = ref<File | string>('https://example.com/report.pdf')
|
|
72
|
+
const viewer = ref<InstanceType<typeof FileViewer> | null>(null)
|
|
73
|
+
</script>
|
|
74
|
+
|
|
75
|
+
<template>
|
|
76
|
+
<FileViewer ref="viewer" :src="file" />
|
|
77
|
+
</template>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`ref` 上可调用:`zoomIn()`、`zoomOut()`、`resetZoom()`、`rotateLeft()`、`rotateRight()`、`download()`、`print()`、`toggleFullscreen()`、`getKind()`、`getSource()`。
|
|
81
|
+
|
|
82
|
+
### 工具函数与类型
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import { detectKind, getExtension, formatBytes, KIND_LABELS } from '@7niao/doc-previewer'
|
|
86
|
+
import type { PreviewKind, FileViewerOptions, PreviewSource } from '@7niao/doc-previewer'
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## 静态资源:压缩包 Worker
|
|
90
|
+
|
|
91
|
+
压缩包预览依赖 `libarchive.js` 的 Worker 与 WASM 文件,组件默认从站点根目录的 `libarchive/` 读取。发布包中已附带这些文件,部署时复制到宿主项目的 public 目录即可:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
cp -R node_modules/@7niao/doc-previewer/dist/libarchive public/libarchive
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
访问路径为 `${BASE_URL}libarchive/worker-bundle.js`。若应用部署在子路径下,请确认 `BASE_URL` 与复制位置一致;未复制时压缩包预览会提示加载失败,其余格式不受影响。
|
|
98
|
+
|
|
99
|
+
## Props
|
|
100
|
+
|
|
101
|
+
| 属性 | 类型 | 必填 | 说明 |
|
|
102
|
+
| --- | --- | --- | --- |
|
|
103
|
+
| `src` | `File \| Blob \| string` | 是 | 文件对象、Blob 或可访问的 URL |
|
|
104
|
+
| `fileName` | `string` | 否 | 覆盖自动识别的文件名 |
|
|
105
|
+
| `mimeType` | `string` | 否 | 覆盖自动识别的 MIME |
|
|
106
|
+
| `kind` | `PreviewKind` | 否 | 强制指定渲染类型,跳过扩展名推断 |
|
|
107
|
+
| `options` | `FileViewerOptions` | 否 | 预览器配置,见下表 |
|
|
108
|
+
|
|
109
|
+
## Events
|
|
110
|
+
|
|
111
|
+
| 事件 | 参数 | 说明 |
|
|
112
|
+
| --- | --- | --- |
|
|
113
|
+
| `ready` | `kind: PreviewKind` | 渲染完成 |
|
|
114
|
+
| `error` | `message: string` | 渲染失败,附带错误原因 |
|
|
115
|
+
| `zoom-change` | `percent: number` | 缩放比例变化 |
|
|
116
|
+
| `download` | `name: string` | 用户点击下载 |
|
|
117
|
+
| `print` | - | 用户点击打印 |
|
|
118
|
+
| `fullscreen-change` | `active: boolean` | 进入 / 退出全屏 |
|
|
119
|
+
|
|
120
|
+
## options
|
|
121
|
+
|
|
122
|
+
| 配置项 | 类型 | 默认值 | 说明 |
|
|
123
|
+
| --- | --- | --- | --- |
|
|
124
|
+
| `height` | `string` | `'640px'` | 组件高度 |
|
|
125
|
+
| `toolbar` | `boolean` | `true` | 是否显示顶部工具栏 |
|
|
126
|
+
| `showFileInfo` | `boolean` | `true` | 是否显示文件名与格式信息 |
|
|
127
|
+
| `zoom` | `{ min?: number; max?: number; step?: number }` | `{ min: 0.1, max: 10, step: 0.2 }` | 缩放范围与每步倍率 |
|
|
128
|
+
| `mapTiles` | `string \| false` | 不加载在线底图 | GIS 底图瓦片地址模板,如 `https://tile.openstreetmap.org/{z}/{x}/{y}.png` |
|
|
129
|
+
| `cadLineColor` | `string` | `'#1f2937'` | CAD 线条颜色 |
|
|
130
|
+
| `textMaxLength` | `number` | `2000000` | 文本预览最大字符数,超出截断 |
|
|
131
|
+
|
|
132
|
+
`PreviewKind` 取值:`image`、`video`、`audio`、`pdf`、`word`、`excel`、`ppt`、`ofd`、`archive`、`cad`、`model3d`、`gis`、`text`、`unsupported`。
|
|
133
|
+
|
|
134
|
+
## 支持格式
|
|
135
|
+
|
|
136
|
+
| 类别 | 扩展名 | 渲染实现 | 说明 |
|
|
137
|
+
| --- | --- | --- | --- |
|
|
138
|
+
| 图片 | jpg/jpeg/png/gif/webp/avif/bmp/ico/svg/tif | 原生 `<img>` | 自适应适口,支持缩放、旋转、拖拽 |
|
|
139
|
+
| 音视频 | mp4/webm/ogv/mov/m4v/mkv、mp3/wav/ogg/aac/flac/m4a | 原生 `<video>` / `<audio>` | 使用浏览器原生控制条,不提供缩放 |
|
|
140
|
+
| PDF | pdf | `pdfjs-dist` | Canvas 单页渲染,支持上一页 / 下一页翻页并显示页码,打印走隐藏 iframe |
|
|
141
|
+
| Word | docx/doc | `docx-preview` | 保留分页与样式;复杂域、嵌入对象可能降级 |
|
|
142
|
+
| Excel | xlsx/xlsm/xls/csv/ods | `xlsx`(SheetJS) | 转 HTML 展示,支持多 Sheet 切换 |
|
|
143
|
+
| PPT | pptx/ppt | `pptx-preview` | 列表模式近似还原版式,动画与部分特效不渲染 |
|
|
144
|
+
| OFD | ofd | `ofd-tools` | SVG 渲染、多页展示;未启用电子签章验签 |
|
|
145
|
+
| CAD | dxf/dwg | `dwg2dxf` + `dxf-parser` + `three.js` | DWG 先经 WASM 转为 DXF 再绘制,支持下钻缩放与旋转 |
|
|
146
|
+
| 3D 模型 | glb/gltf | `three.js` GLTFLoader + OrbitControls | 不支持 Draco 压缩模型 |
|
|
147
|
+
| GIS | kml/kmz/shp/geojson | `leaflet` + `@tmcw/togeojson` + `shpjs` | SHP 需配套 `.prj` 才有正确投影;未配置 `mapTiles` 时显示网格底图 |
|
|
148
|
+
| 压缩包 | zip/rar/7z/tar/gz/bz2/xz | `libarchive.js` | 条目列表、密码解锁、单条目嵌套预览,最多展示 500 条 |
|
|
149
|
+
| 文本 | txt/text/md/json/log/xml/yaml/ini/js/ts/py/go 等 | 内置文本渲染器 | UTF-8 解码,`.json` 自动格式化,超长截断 |
|
|
150
|
+
|
|
151
|
+
未识别的格式会显示提示并提供下载入口。
|
|
152
|
+
|
|
153
|
+
## 依赖说明
|
|
154
|
+
|
|
155
|
+
所有渲染引擎均已在发布产物的按需分包中内联,使用方只需安装 `vue`。以下依赖仅在本仓库开发与构建时需要(列于 `devDependencies`):
|
|
156
|
+
|
|
157
|
+
| 依赖 | 用途 |
|
|
158
|
+
| --- | --- |
|
|
159
|
+
| `pdfjs-dist` | PDF 解析与 Canvas 渲染,包含独立 worker |
|
|
160
|
+
| `docx-preview` | docx 分页渲染 |
|
|
161
|
+
| `xlsx` | Excel / CSV 解析与表格 HTML 输出 |
|
|
162
|
+
| `pptx-preview` | pptx 版式渲染 |
|
|
163
|
+
| `ofd-tools` | OFD 文档解析与 SVG 渲染 |
|
|
164
|
+
| `libarchive.js` | zip/rar/7z 等压缩包解压(Worker + WASM) |
|
|
165
|
+
| `dwg2dxf` | DWG 转 DXF 的 WASM 转换器 |
|
|
166
|
+
| `dxf-parser` | DXF 实体解析 |
|
|
167
|
+
| `three` | CAD 与 3D 模型绘制、轨道控制器 |
|
|
168
|
+
| `leaflet`、`shpjs`、`@tmcw/togeojson`、`fflate` | GIS 地图、Shapefile 与 KML/KMZ 解析 |
|
|
169
|
+
| `@lucide/vue` | 工具栏与状态图标 |
|
|
170
|
+
|
|
171
|
+
注:`ofd-tools` 内部依赖的 `@lapo/asn1js` 仅用于电子签章验签,构建时被替换为最小实现,因此不支持 OFD 签章校验。
|
|
172
|
+
|
|
173
|
+
## 技术栈
|
|
174
|
+
|
|
175
|
+
- Vue 3.5(`<script setup>` + Composition API)
|
|
176
|
+
- TypeScript 6 + `vue-tsc` 生成类型声明
|
|
177
|
+
- Vite 8(Rolldown)+ `build.lib` 模式产出 ESM 组件库
|
|
178
|
+
- 渲染层:PDF.js、docx-preview、SheetJS、pptx-preview、ofd-tools、libarchive.js、three.js、Leaflet
|
|
179
|
+
- 样式:组件内 scoped CSS,统一抽取为 `dist/style.css`,支持 `prefers-color-scheme` 深色模式
|
|
180
|
+
|
|
181
|
+
## 本地开发与发布
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# 安装依赖
|
|
185
|
+
pnpm install
|
|
186
|
+
|
|
187
|
+
# 启动演示站点(含 20 个示例文件)
|
|
188
|
+
pnpm dev
|
|
189
|
+
|
|
190
|
+
# 类型检查
|
|
191
|
+
pnpm typecheck
|
|
192
|
+
|
|
193
|
+
# 构建组件库 -> dist/
|
|
194
|
+
pnpm build
|
|
195
|
+
|
|
196
|
+
# 构建演示站点 -> dist-demo/
|
|
197
|
+
pnpm build:demo
|
|
198
|
+
|
|
199
|
+
# 查看发布内容
|
|
200
|
+
pnpm pack --dry-run
|
|
201
|
+
|
|
202
|
+
# 发布到 npm(需先 npm login,且包名带作用域需 --access public)
|
|
203
|
+
pnpm publish:lib
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
发布流程:修改 `version` → `pnpm publish:lib`。`prepublishOnly` 会自动执行组件库构建,确保 `dist/` 为最新产物;发布内容包括 `dist/`(JS 分包、`style.css`、`types/`、`libarchive/` 资源)。
|
|
207
|
+
|
|
208
|
+
## 注意事项
|
|
209
|
+
|
|
210
|
+
- 远程 URL 预览需要目标服务允许跨域(CORS)。
|
|
211
|
+
- PDF 字体、Office 文档字体依赖运行环境,缺失字体会自动回退。
|
|
212
|
+
- 扫描版 PDF 无文本层,不提供 OCR。
|
|
213
|
+
- 压缩包条目在内存中解压,建议控制单个文件体积。
|
|
214
|
+
- 预览组件按浏览器能力降级:不支持的原生音视频编码会给出错误提示并保留下载入口。
|
|
215
|
+
|
|
216
|
+
## License
|
|
217
|
+
|
|
218
|
+
[ISC](./LICENSE)
|