@embedpdf-editor/chapter-snippet 0.3.3 → 0.3.5
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/README.md +94 -2
- package/dist/embedpdf-chapter.js +65295 -47014
- package/dist/embedpdf-chapter.js.map +1 -1
- package/package.json +10 -9
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# @embedpdf-editor/chapter-snippet
|
|
2
2
|
|
|
3
|
-
框架无关的章节 PDF 阅读器运行时。它把 Preact 阅读器封装成 Web Component
|
|
3
|
+
框架无关的章节 PDF 阅读器运行时。它把 Preact 阅读器封装成 Web Component。
|
|
4
|
+
|
|
5
|
+
**Vue 2 请使用本包**(`@embedpdf-editor/chapter-snippet`),不要用已移除的 `@embedpdf-editor/vue2-chapter-viewer`。宿主为 Vue 2 / 传统页面 / 微前端,或任何不想引入 React/Vue3 渲染器的场景。
|
|
4
6
|
|
|
5
7
|
能力与 React/Vue3 渲染器保持一致:多章连续滚动、划线/高亮、附注、段落书签、章节目录和标注导入导出。
|
|
6
8
|
|
|
@@ -12,7 +14,7 @@ pnpm add @embedpdf-editor/chapter-snippet
|
|
|
12
14
|
|
|
13
15
|
## Vite
|
|
14
16
|
|
|
15
|
-
`chapterSnippetViteResolve()` 用于 Vue2/snippet 场景:
|
|
17
|
+
`chapterSnippetViteResolve()` 用于 Vite + Vue2/snippet 场景:
|
|
16
18
|
|
|
17
19
|
```ts
|
|
18
20
|
// vite.config.ts
|
|
@@ -31,6 +33,22 @@ export default defineConfig({
|
|
|
31
33
|
| `server.headers` | 开发环境添加 COOP/COEP,满足 worker/wasm 常见要求 |
|
|
32
34
|
| `optimizeDeps.exclude` | 避免 Vite 二次预构建 snippet 和 PDFium 引擎 |
|
|
33
35
|
|
|
36
|
+
## Vue CLI / Webpack
|
|
37
|
+
|
|
38
|
+
**无需修改 `vue.config.js`。** 安装后直接:
|
|
39
|
+
|
|
40
|
+
```js
|
|
41
|
+
import ChapterEmbedPDF from '@embedpdf-editor/chapter-snippet';
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
发包构建会对 `dist/embedpdf-chapter.js` 做语法降级(去掉 `??` 等 ES2020 语法),Webpack / Vue CLI 默认可 parse。默认 `wasmUrl` 指向 jsDelivr 上的 `pdfium.wasm`,无需复制到 `public/`。
|
|
45
|
+
|
|
46
|
+
离线或内网部署时,可传 `wasmUrl: '/pdfium.wasm'`(自行把 `node_modules/@embedpdf-editor/chapter-snippet/dist/pdfium.wasm` 放到静态目录)。
|
|
47
|
+
|
|
48
|
+
`@embedpdf-editor/chapter-snippet/webpack` 为**可选**辅助(仅 monorepo Vue 2.6 解析、或自定义 devServer COOP/COEP),普通用户不必使用。
|
|
49
|
+
|
|
50
|
+
完整示例见 `examples/chapter-viewer-demo-vue2`。
|
|
51
|
+
|
|
34
52
|
## 快速开始
|
|
35
53
|
|
|
36
54
|
不需要把 `pdfium.wasm` 手动放到宿主项目的 `public/`。默认会从 `@embedpdf-editor/chapter-snippet/dist/pdfium.wasm` 加载。只有当你要走 CDN 或自定义静态域名时,才需要传 `wasmUrl`。
|
|
@@ -114,6 +132,62 @@ viewer?.addEventListener(CHAPTER_SNIPPET_EVENTS.ready, (event) => {
|
|
|
114
132
|
|
|
115
133
|
旧版本的 `editorInput` 仍可使用,但新代码应改为 `options`。`options.features` 会参与合并,顶层 `features` 仅作为兼容覆盖保留。
|
|
116
134
|
|
|
135
|
+
### `ChapterViewerOptions`(与 React / Vue3 一致)
|
|
136
|
+
|
|
137
|
+
| 字段 | 说明 |
|
|
138
|
+
| --- | --- |
|
|
139
|
+
| `manifest` | 章节目录,见 [React README Manifest](../react-chapter-viewer/README.md#manifest) |
|
|
140
|
+
| `notes` | `NoteCallbacks`,见 [React README](../react-chapter-viewer/README.md#notes附注回调) |
|
|
141
|
+
| `bookmarks` | `ParagraphBookmarkCallbacks`,见 [React README](../react-chapter-viewer/README.md#bookmarks段落书签回调) |
|
|
142
|
+
| `chapterPdfLoader` / `overlapStrategy` | 自定义 PDF 加载与重叠页策略 |
|
|
143
|
+
| `features` | 功能开关与 UI 定制,见下 |
|
|
144
|
+
|
|
145
|
+
加密 PDF 可在底层 `createPdfChapterEditor` 选项中设置 `passwordProvider`(如 `CallbackPasswordProvider` from `@embedpdf-editor/chapter-core`)。
|
|
146
|
+
|
|
147
|
+
### `features` 配置
|
|
148
|
+
|
|
149
|
+
与 React / Vue3 **同一套** `ChapterViewerConfig`(`@embedpdf-editor/chapter-viewer`)。完整字段表见 [React README:`features` 配置](../react-chapter-viewer/README.md#features-配置)。
|
|
150
|
+
|
|
151
|
+
| 模块 | 要点 |
|
|
152
|
+
| --- | --- |
|
|
153
|
+
| `markup` | `styles` 四类划线;`annotationMenu` 默认选中后在下方显示「删除」;`squiggly.offsetY` 默认 **4** |
|
|
154
|
+
| `bookmarks` | `marker` / `hover` 自定义图标 |
|
|
155
|
+
| `notes` | `marker.renderIcon`、`renderMenuActions`、`highlightColor` |
|
|
156
|
+
| `zoom` | `pageWidth`、`min` / `max` / `enabled` |
|
|
157
|
+
| `selectionToolbar` | `hiddenBuiltinActions`、`extraActions`;扩展动作监听 `selectionExtraAction` 事件 |
|
|
158
|
+
|
|
159
|
+
```js
|
|
160
|
+
features: {
|
|
161
|
+
markup: {
|
|
162
|
+
styles: {
|
|
163
|
+
highlight: { color: '#fef08a', opacity: 0.45 },
|
|
164
|
+
underline: { color: '#dc2626', thickness: 1.5, offsetY: 2.5 },
|
|
165
|
+
squiggly: { color: '#dc2626', thickness: 1.5, offsetY: 4 },
|
|
166
|
+
},
|
|
167
|
+
annotationMenu: {
|
|
168
|
+
enabled: true,
|
|
169
|
+
renderMenu: ({ onDelete }) => {
|
|
170
|
+
const btn = document.createElement('button');
|
|
171
|
+
btn.textContent = '移除';
|
|
172
|
+
btn.onclick = onDelete;
|
|
173
|
+
return btn;
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
notes: {
|
|
178
|
+
marker: {
|
|
179
|
+
renderIcon: () => /* DOM */,
|
|
180
|
+
renderMenuActions: ({ onEdit, onDelete }) => /* DOM */,
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
selectionToolbar: {
|
|
184
|
+
extraActions: [{ id: 'cite', label: '引用', order: 10 }],
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
`renderMenu` / `renderIcon` 在 snippet(Preact)内执行,请返回 **DOM 或 Preact 节点**;Vue 2 宿主不要用 `h()` 直接塞进 Shadow DOM。
|
|
190
|
+
|
|
117
191
|
## 事件
|
|
118
192
|
|
|
119
193
|
snippet 通过 DOM `CustomEvent` 把需要宿主 UI 参与的动作抛出来。
|
|
@@ -169,6 +243,24 @@ import {
|
|
|
169
243
|
|
|
170
244
|
在 snippet 中可通过 `chapter-viewer-ready` 事件拿到 `registry`,再调用这些 API。导出格式包含 `bookmarks`、`notes`、`markup`,版本常量为 `CHAPTER_ANNOTATIONS_ARCHIVE_VERSION`。
|
|
171
245
|
|
|
246
|
+
| 选项 | 说明 |
|
|
247
|
+
| --- | --- |
|
|
248
|
+
| `mode` | `replace` 清空后导入;`merge` 合并 |
|
|
249
|
+
| `ensureChapterLoaded` | 默认 true,导入 markup 前打开 PDF |
|
|
250
|
+
| `bookmarks` / `notes` / `markup` | 默认 true,可关闭某一类 |
|
|
251
|
+
| `persistNotes` / `persistBookmarks` | 导入后写回业务存储 |
|
|
252
|
+
|
|
253
|
+
示例见 `examples/chapter-viewer-demo-vue2/src/components/AnnotationsDemoBar.vue`。
|
|
254
|
+
|
|
255
|
+
## 与 React / Vue3 渲染器的区别
|
|
256
|
+
|
|
257
|
+
| 项 | React / Vue3 | chapter-snippet(本包,含 Vue 2) |
|
|
258
|
+
| --- | --- | --- |
|
|
259
|
+
| 运行时 | 框架内 `editor-engine` 组件 | Shadow DOM Web Component + Preact |
|
|
260
|
+
| 初始化 | `<ChapterPdfViewer options={...} />` | `ChapterEmbedPDF.init({ type: 'container', target, options })` |
|
|
261
|
+
| Registry | hook / ref | `chapter-viewer-ready` → `detail.registry` |
|
|
262
|
+
| Vite | `chapterViewerViteResolve()` | `chapterSnippetViteResolve()` |
|
|
263
|
+
|
|
172
264
|
## 常见问题
|
|
173
265
|
|
|
174
266
|
| 现象 | 处理 |
|