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

相关推荐
ricky_fan2 小时前
(最新版)Cluade code安装、部署教程-Mac
linux·编辑器·vim
放风筝的猪2 小时前
从“逐字预测”到“全量并行”:深度拆解语音识别与合成的效率革命
人工智能·语音识别
James man2 小时前
前端节点连接库选型指南:React-Flow、AntV X6 与 Power-Link 深度对比
前端·react.js·前端框架
chnyi6_ya2 小时前
Beyond Language Modeling: An Exploration of Multimodal Pretraining
人工智能·语言模型·自然语言处理
腾视科技TENSORTEC2 小时前
腾视科技重磅发布AD03行车记录仪DashCam!全维守护,智驭出行新生态
大数据·网络·人工智能·科技·ai·车载系统·车载监控
于慨2 小时前
java Web
java·开发语言·前端
徐小夕@趣谈前端2 小时前
借助AI,1周,0后端成本,我们开源了一款Office预览SDK
前端·人工智能·开源·node.js·编辑器·github·格式工厂
云境筑桃源哇2 小时前
AI审核进入全维创新时代:合思如何重构企业合规与效率双壁垒
人工智能·重构
十八画圣2 小时前
企业级AI Agent落地:我们用Openclaw实现了哪些自动化?
运维·人工智能·自动化