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

2026年03月19日作者:Charles

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

全新 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 变量即可。

Manipulate PDF Content with the New ONLYOFFICE PDF Editor API

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

此宏会扫描每一页并删除所有绘图对象,或仅删除特定类型。它使用 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 变量,您可以在全面清理和选择性清理之间切换,而无需修改代码的其他部分。

Manipulate PDF Content with the New ONLYOFFICE PDF Editor API

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

我们的最后一个宏创建了一个可自定义的水印形状,并将其放置在文档的每一页上。它使用 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);
    }
})();

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

Manipulate PDF Content with the New ONLYOFFICE PDF Editor API

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

创建免费的 ONLYOFFICE 账户

在线查看并协作编辑文本文档、电子表格、幻灯片、表单和 PDF 文件。