PDF 编辑模块
PDF 编辑模块用于在 Viewer 中交互式编辑 PDF 页面内容,例如编辑页面上的文本、图片、路径、渐变对象,或新增文本、图片、形状对象。
版本说明
- 在 10.0 版本之前,WebSDK 曾区分 Light package、Standard package 和 Full package。Light / Standard package 使用 Std Edit,Full package 默认使用 Adv Edit。
- 从 10.0 版本开始,WebSDK 不再提供标准包(Standard package)。
如何选择
SDK 提供的编辑能力包括 页面对象 API、Std Edit 和 Adv Edit,开发者可根据具体需求场景,选择对应的方式。
| 需求 | 推荐方式 | 说明 |
|---|---|---|
| 通过代码读取、添加或删除页面对象 | 页面对象 API | 使用 PDFPage、GraphicsObject、TextObject、ImageObject、PathObject 等接口,详见 页面对象。 |
| 让用户在 Viewer 中做基础对象编辑 | Std Edit | 适合编辑文本、图片、路径对象,新增文本、图片和路径,设置基础文字样式。 |
| 需要完整编辑器体验 | Adv Edit | 适合 Touchup 文本编辑、对象筛选、形状和渐变编辑、文本块合并拆分、查找替换等高级交互。 |
| 只搜索或定位文本,不修改内容 | 文本搜索 | 请参阅 文本搜索。 |
UI 示例
Std Edit 功能区

Adv Edit 功能区

Adv Edit 右侧面板

常用入口
如果只是使用完整默认 UI,一般不需要直接操作下面这些组件或 add-on。只有在自定义工具栏、替换编辑入口、或通过代码触发编辑能力时,才需要了解这些入口。
UIExtension 组件
组件标签适合放在自定义模板、Ribbon 分组或 fragments 中。完整组件清单见 预配置组件 — 页面对象编辑插件中的组件。
| 分类 | 组件 | 用途 |
|---|---|---|
| Adv Edit 入口 |
| 进入高级编辑工具,可编辑页面对象或 Touchup 文本内容。 |
| Adv Edit 辅助工具 |
| 文本块合并、拆分、链接及查找替换入口。 |
| Adv Edit 新增对象 |
| 新增文本、图片和形状对象。 |
| Std Edit 入口 |
| 提供基础对象编辑,以及新增图片、文本和路径对象能力;右键菜单依赖 edit-graphics 中组件。 |
说明
- 如果要在模板、Ribbon、右键菜单里直接放内置编辑组件,查看 预配置组件 — 页面对象编辑插件中的组件。
- 如果要写自定义编辑按钮,并复用 SDK 内置点击逻辑,查看 完整阅读器 — UIExtension Addon 中的 controller。
编程接口
Add-on API 适合通过代码主动进入编辑状态、执行查找替换,或设置编辑工具样式。
| 分类 | 接口 | 用途 |
|---|---|---|
| Adv Edit Add-on API |
| 控制 Adv Edit 的页面对象编辑、Touchup 编辑和工具样式。相关能力需要 Adv Edit 模块和授权。 |
| Adv Edit 查找替换 Add-on API |
| 查找并替换 PDF 页面文本,属于高级编辑相关能力。 |
| Std Edit Add-on API |
| 控制 Std Edit 的路径与文本对象编辑相关能力;图形对象右键菜单等由 edit-graphics 提供。 |
| 基础页面对象 API |
| 直接读写页面内容对象,不依赖编辑 UI,适合程序化处理;详见 页面对象。 |
Adv Edit 切换为 Std Edit
完整 UI 默认展示 Adv Edit 相关入口。若没有 Adv Edit 授权,或只希望展示 Std Edit 的基础页面对象编辑能力,可以替换 Edit 选项卡中的相关组件。
推荐优先使用 fragments,因为它在初始化时完成布局替换,结构更清晰;Component API 更适合运行时动态调整。
方法 1:通过 fragments 参数修改
初始化 PDFUI 时,通过 fragments 替换 Adv Edit 组件:
javascript
fragments: [
{
target: 'adv-edit-tab-group-mode',
action: UIExtension.UIConsts.FRAGMENT_ACTION.REPLACE,
template: `
<group name="edit-tab-group-mode" retain-count="3">
<edit-pageobjects:edit-all-objects-button @async></edit-pageobjects:edit-all-objects-button>
<add-image-ribbon-button></add-image-ribbon-button>
<edit-text-object:add-text-ribbon-button @async></edit-text-object:add-text-ribbon-button>
<edit-pageobjects:path-objects-ribbon-dropdown @async></edit-pageobjects:path-objects-ribbon-dropdown>
</group>
`
},
{
target: 'edit-tab-group-editor',
action: UIExtension.UIConsts.FRAGMENT_ACTION.REPLACE,
template: `
<group name="edit-tab-group-font" retain-count="5" @require-modules="edit-text-object">
<edit-text-object:text-bold-style-ribbon-button></edit-text-object:text-bold-style-ribbon-button>
<edit-text-object:text-italic-style-ribbon-button></edit-text-object:text-italic-style-ribbon-button>
<edit-text-object:font-color-picker></edit-text-object:font-color-picker>
<edit-text-object:font-style-dropdown></edit-text-object:font-style-dropdown>
</group>
`
}
]
备注
有关 fragments 参数更详细的信息,请参阅 UI Fragments。
方法 2:通过 Component 对象接口切换
javascript
// 获取 Adv Edit 模块的编辑功能的 advEditTabGroupMode 组件
const advEditTabGroupMode = await pdfui.getComponentByName("adv-edit-tab-group-mode");
// 移除刚获取的 advEditTabGroupMode 组件
advEditTabGroupMode.remove();
// 获取 Adv Edit 模块的编辑功能的 advEditTabGroupEditor 组件
const advEditTabGroupEditor = await pdfui.getComponentByName("edit-tab-group-editor");
// 移除刚获取的 advEditTabGroupEditor 组件
advEditTabGroupEditor.remove();
// 获取 Edit 选项卡下第一个包含 hand 功能的 editTabGroupHand 组件
const editTabGroupHand = await pdfui.getComponentByName("edit-tab-group-hand");
// 在 editTabGroupHand 组件后插入目标 Edit 模块
editTabGroupHand.after(`
<group name="edit-tab-group-font" retain-count="5">
<edit-text-object:text-bold-style-ribbon-button></edit-text-object:text-bold-style-ribbon-button>
<edit-text-object:text-italic-style-ribbon-button></edit-text-object:text-italic-style-ribbon-button>
<edit-text-object:font-color-picker></edit-text-object:font-color-picker>
<edit-text-object:font-style-dropdown></edit-text-object:font-style-dropdown>
</group>
`)
editTabGroupHand.after(`
<group name="edit-tab-group-mode" retain-count="3">
<edit-pageobjects:edit-all-objects-button @async></edit-pageobjects:edit-all-objects-button>
<add-image-ribbon-button></add-image-ribbon-button>
<edit-text-object:add-text-ribbon-button @async></edit-text-object:add-text-ribbon-button>
<edit-pageobjects:path-objects-ribbon-dropdown @async></edit-pageobjects:path-objects-ribbon-dropdown>
</group>
`)
保存编辑结果
编辑模块修改的是 PDF 页面内容。编辑完成后,如需下载或上传修改后的 PDF,应通过当前 PDFDoc 导出文件。
javascript
const pdfDoc = pdfViewer.getCurrentPDFDoc();
const file = await pdfDoc.getFile({
fileName: 'edited.pdf'
});
注意事项
- 编辑页面内容通常需要文档修改权限,受 PDF 权限和业务 UI 权限共同影响。
- 编辑模块面向交互式编辑;批量处理页面对象时,建议使用 页面对象 的 API。
- 修改 PDF 内容后,需要导出或保存文件,变更才会写入最终 PDF。
- 自定义编辑工具条时,优先通过 fragments 或 Component API 调整内置组件,不建议直接操作内部 DOM。