Skip to content

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 提供的编辑能力包括 页面对象 APIStd EditAdv Edit,开发者可根据具体需求场景,选择对应的方式。

需求推荐方式说明
通过代码读取、添加或删除页面对象页面对象 API使用 PDFPageGraphicsObjectTextObjectImageObjectPathObject 等接口,详见 页面对象
让用户在 Viewer 中做基础对象编辑Std Edit适合编辑文本、图片、路径对象,新增文本、图片和路径,设置基础文字样式。
需要完整编辑器体验Adv Edit适合 Touchup 文本编辑、对象筛选、形状和渐变编辑、文本块合并拆分、查找替换等高级交互。
只搜索或定位文本,不修改内容文本搜索请参阅 文本搜索

UI 示例

Std Edit 功能区

ribbon of Edit

Adv Edit 功能区

ribbon of Adv Edit

Adv Edit 右侧面板

ribbon of the right panel of Adv Edit

常用入口

如果只是使用完整默认 UI,一般不需要直接操作下面这些组件或 add-on。只有在自定义工具栏、替换编辑入口、或通过代码触发编辑能力时,才需要了解这些入口。

UIExtension 组件

组件标签适合放在自定义模板、Ribbon 分组或 fragments 中。完整组件清单见 预配置组件 — 页面对象编辑插件中的组件

分类组件用途
Adv Edit 入口
  • page-editor:edit-object-ribbon-dropdown
  • page-editor:edit-text
进入高级编辑工具,可编辑页面对象或 Touchup 文本内容。
Adv Edit 辅助工具
  • page-editor:join-split
  • page-editor:join / split / link / unlink / select-none / close
  • find-replace-button
文本块合并、拆分、链接及查找替换入口。
Adv Edit 新增对象
  • page-editor:add-text-button
  • page-editor:add-image-button
  • page-editor:add-shapes-ribbon-dropdown
新增文本、图片和形状对象。
Std Edit 入口
  • edit-pageobjects:edit-all-objects-button
  • add-image-ribbon-button
  • edit-text-object:add-text-ribbon-button
  • edit-pageobjects:path-objects-ribbon-dropdown
提供基础对象编辑,以及新增图片、文本和路径对象能力;右键菜单依赖 edit-graphics 中组件。

说明

编程接口

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
  • PDFPage.addGraphicsObject()
  • PDFPage.addImage() / addRichText()
  • PDFPage.getGraphicsObjectByIndex() / getGraphicsObjectsCount()
  • PDFPage.getGraphicsObjectAtPoint() / getGraphicsObjectsInRect() / getGraphicsObjectsByRect()
  • PDFPage.removeGraphicsObject()
  • GraphicsObjectTextObjectImageObjectPathObject
直接读写页面内容对象,不依赖编辑 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。
  • 自定义编辑工具条时,优先通过 fragmentsComponent API 调整内置组件,不建议直接操作内部 DOM。