ONLYOFFICE 全新 PDF 编辑器 API 上线,自动化处理 PDF 内容

近日,ONLYOFFICE 正式推出全新 PDF API,为 PDF 文档带来了宏支持。借助这套新增的 API 方法,您可以以编程方式与 PDF 文档交互,自动化处理那些原本需要手动完成的任务。本文将通过 3 个实用的宏示例,带你解锁这套 API 的核心能力与实战场景。

关于 ONLYOFFICE 文档

ONLYOFFICE 是一个开源项目,专注于高级和安全的文档处理,是在线办公解决方案的提供者,全球用户已超过1500万。
ONLYOFFICE 办公套件提供文本文档、电子表格、幻灯片、表单和 PDF 编辑器。ONLYOFFICE 文档高度兼容 MS Office 格式,并提供数百种格式化和样式工具,以及多种协作功能。在智能办公方面,它深度集成了 AI 插件功能,用户可在编辑器内直接调用任意 AI 模型(如 DeepSeek、ChatGPT、通义千问、Kimi 等),无需在不同网页或应用间反复切换。

全新 PDF API****方法概览

以下是 3 个宏示例中用到的 API 方法说明:

  • GetPagesCount (): 返回 PDF 文档的总页数。
  • GetPage (index): 通过索引获取指定页面对象,返回一个 ApiPage 对象。
  • GetAllAnnots(): 返回指定页面上所有批注对象组成的数组。
  • GetContents (): 获取批注的文本内容。
  • GetAllDrawings (): 返回指定页面上所有绘图对象(形状、图表、图片)组成的数组。
  • SetPosition (x, y): 通过绝对坐标,将绘图对象精准定位到页面指定位置。
  • AddObject (object): 向指定页面添加绘图对象(形状、图表、图片)。
  • Delete (): 从文档删除指定对象。

上述方法隶属于 ApiDocumentApiPageApiBaseAnnotationApiDrawing 类,可与你已熟知的现有 Office API 方法搭配使用。

示例一:按关键词删除批注

第一个宏可自动查找并删除所有包含指定关键词的批注,以下是分步实现说明。

设置关键词和文档

复制代码
const KEYWORD = "example";
const doc = Api.GetDocument();
const pagesCount = doc.GetPagesCount();
let deletedCount = 0;

首先,我们定义目标关键词:任何内容包含此词的注释都将被移除。接着,我们获取当前文档,并使用 GetPagesCount() 函数得到总页数。deletedCount 变量将用于追踪我们删除了多少个注释。

复制代码
for (let i = 0; i < pagesCount; i++) {
    const page = doc.GetPage(i);
    const annots = page.GetAllAnnots();

    if (!annots || annots.length === 0) continue;

通过 for 循环遍历文档的每一页。对每一页,使用 GetPage () 获取 ApiPage 页面对象,再通过 GetAllAnnots () 获取该页的所有批注。若当前页面无批注,则直接跳过,进入下一页循环。

匹配并删除批注

复制代码
for (let j = annots.length - 1; j >= 0; j--) {
    const annot = annots[j];
    const contents = (annot.GetContents() || "").toLowerCase();

在每一页中,我们以逆向顺序遍历注释。逆向迭代很重要,因为在正向遍历数组时删除元素会导致索引偏移和元素跳过。对每个批注,通过 GetContents () 提取其文本内容,并转换为小写,以便进行不区分大小写的比较。

复制代码
if (contents.includes(KEYWORD.toLowerCase())) {
    annot.Delete();
    deletedCount++;
}

若批注文本包含目标关键词,调用 Delete () 方法将其从文档中删除,并增加计数器的值

复制代码
console.log("Deleted annotations containing keyword:", KEYWORD);

console.log("Total deleted:", deletedCount);

最后,宏会将搜索的关键词以及删除的批注总数记录到控制台。

完整宏代码:

复制代码
(function () {
    const KEYWORD = "example";
    const doc = Api.GetDocument();
    const pagesCount = doc.GetPagesCount();
    let deletedCount = 0;

    for (let i = 0; i < pagesCount; i++) {
        const page = doc.GetPage(i);
        const annots = page.GetAllAnnots();

        if (!annots || annots.length === 0) continue;

        for (let j = annots.length - 1; j >= 0; j--) {
            const annot = annots[j];
            const contents = (annot.GetContents() || "").toLowerCase();

            if (contents.includes(KEYWORD.toLowerCase())) {
                annot.Delete();
                deletedCount++;
            }
        }
    }

    console.log("Deleted annotations containing keyword:", KEYWORD);
    console.log("Total deleted:", deletedCount);
})();

宏运行后,文档中包含指定关键词的每一个注释都会被移除。要指定其他的关键词,只需更新代码顶部的 KEYWORD 变量即可。

示例二:删除所有绘图对象

此宏会扫描每一页并删除所有绘图对象,或仅删除特定类型。它使用 GetAllDrawings() 函数来获取每页上的所有视觉元素,并在删除前使用 GetClassType() 检查其类型。

顶部的 targetType 变量控制要删除的内容。将其设为"all"以删除所有绘图对象,或使用"shape"、"image"、"chart"来针对特定类型的绘图。

复制代码
(function () {
    const doc = Api.GetDocument();
    const pagesCount = doc.GetPagesCount();
    let totalDeleted = 0;

    const targetType = "all";

    for (let i = 0; i < pagesCount; i++) {
        const page = doc.GetPage(i);
        const drawings = page.GetAllDrawings();

        for (let j = 0; j < drawings.length; j++) {
            if (targetType === "all" || drawings[j].GetClassType() === targetType) {
                drawings[j].Delete();
                totalDeleted++;
            }
        }
    }

    console.log("Deleted " + totalDeleted + " drawing(s) from " + pagesCount + " page(s).");
})();

无论您是为了打印准备文档、移除过时的图表,还是在重新分发前去除图片:这个宏都能搞定。通过调整 targetType 变量,您可以在全面清理和选择性清理之间切换,而无需修改代码的其他部分。

示例三:为每一页添加水印

我们的最后一个宏创建了一个可自定义的水印形状,并将其放置在文档的每一页上。它使用 SetPosition() 将形状精确放置在页面坐标上,并使用 AddObject() 将其添加到每一页。

所有关键属性都在顶部定义为变量,便于调整水印文本、颜色、字体大小、位置和旋转角度。

复制代码
(function () {
    const doc = Api.GetDocument();
    const pagesCount = doc.GetPagesCount();

    const watermarkText = "DRAFT";
    const bgColor = Api.CreateRGBColor(200, 200, 200);
    const textColor = Api.CreateRGBColor(255, 255, 255);
    const fontSize = 72;
    const positionX = 1200000;
    const positionY = 4000000;
    const rotation = -45;

    for (let i = 0; i < pagesCount; i++) {
        const page = doc.GetPage(i);
        const fill = Api.CreateSolidFill(bgColor);
        const stroke = Api.CreateStroke(0, Api.CreateNoFill());
        const watermark = Api.CreateShape("rect", 160 * 36000, 20 * 36000, fill, stroke);
        watermark.SetPosition(positionX, positionY);
        watermark.SetRotation(rotation);

        const content = watermark.GetContent();
        const para = content.GetElement(0);
        para.SetJc("center");
        const run = para.AddText(watermarkText);
        run.SetFontSize(fontSize);
        run.SetBold(true);
        run.SetFill(Api.CreateSolidFill(textColor));

        page.AddObject(watermark);
    }
})();

水印由带有文本内容的标准形状构建,让您可以完全控制其外观:从微妙的背景标签到醒目的全页印章。您也可以尝试不同的形状大小、字体样式或旋转角度,为您的文档找到最合适的外观。

这三个宏只是一个起点:全新的 PDF API 为您自动化 PDF 工作流开启了更多可能性。您可以组合这些方法,构建更高级、更贴合您特定需求的宏。探索下方链接的 API 文档和宏示例,获取更多灵感。如果您有任何疑问或想分享您的成果,随时联系我们!

立即使用 ONLYOFFICE PDF API 实现自动化办公

对于开发者而言,ONLYOFFICE PDF API 提供了一套实用工具,可将 PDF 处理功能集成到现有系统中。欢迎使用 ONLYOFFICE PDF API ,自动化处理 PDF 内容。

立即使用https://api.onlyoffice.com/zh-CN/docs/office-api/usage-api/pdf-api/

相关链接

ONLYOFFICE 文档 9.3 版本新特性一览

ONLYOFFICE PDF 宏示例合集

宏入门指南

宏调试教程

ONLYOFFICE GitHub

相关推荐
Xzaveir19 分钟前
别把所有“认证”都塞进 AuthService:实名、一键登录与号码身份的领域拆分
android·人工智能
BerrySen17829 分钟前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·人工智能
战族狼魂34 分钟前
高频面试题精选:分治与AI Agent架构
人工智能·算法·大模型·大语言模型
zSD55rt5a1 小时前
方差在扩散模型保护中的作用
人工智能·harmonyos
Suhan421 小时前
IDEA 设置启动参数和环境变量
spring boot·spring·编辑器·idea
人生百态,人生如梦2 小时前
情感交互仿生人从技术到落地构想3——技术交流贴(2026.7)
人工智能·机器学习·人机交互·交互·具身智能
瑞瑞小同学2 小时前
处理echarts x轴内容过多,重叠问题
前端·javascript·echarts
用户652238438112 小时前
为什么成熟的 LLM 应用,都把"后端地址"做成可切换的配置
人工智能
Aa99883342 小时前
AI视觉检测设备厂家的技术评估框架——以及AI视觉检测的检出边界与适用条件
人工智能