使用 ONLYOFFICE API 新方法,从第二页开始插入自定义页码!

ops/2025/2/22 8:41:01/

ONLYOFFICE 宏是一种功能强大的工具,可以让用户扩展编辑器的功能并对其进行定制,以满足特定需求。随着 8.3 版本的发布,我们推出了一系列新的 API 方法,能够帮您简化工作流程。 在本文中,我们将使用其中一种方法创建一个宏,从第二页开始,在整个文档中插入自定义页码。

How to insert custom page numbers from the second page using the new ONLYOFFICE API method

关于 ONLYOFFICE 

ONLYOFFICE 是一个国际开源项目,专注于高级和安全的文档处理,可提供文本文档、电子表格、幻灯片、表单和 PDF 编辑器。ONLYOFFICE 文档高度兼容微软 Office 格式,并提供数百种格式化和样式工具,帮助您实现复杂的编辑功能。

如果您需要为您的企业集成强大的编辑功能,或是为您的应用程序、网站或其他解决方案提供强大的编辑功能,您可以选择开发者版。观看下方视频,了解更多信息:

ONLYOFFICE文档开发者版:集成至Web应用程序,实现文档编辑功能

什么是 ONLYOFFICE 宏

如果您是一名资深 Microsoft Excel 用户,那么相信您已对于 VBA 宏非常熟悉了。这些宏是帮助您自动执行日常任务的小型脚本。无论是重构数据,还是在单元格区域中插入多个值。ONLYOFFICE 宏的基础是 JavaScript 语法文档生成器 API 方法。基于 JavaSript 的宏易于使用,具有跨平台特性且十分安全。这就使得其与 VBA 相比有着显著的优势。
下面一起来看看如何创建宏,用来帮您插入自定义页码,简化工作流程。

关于设置起始页码的方法

设置起始页码的方法是 ApiSection 类的一部分。 通过这个新方法,您可以定义文档中特定章节的起始页码。 下面是其实现的示例:

let doc = Api.GetDocument();
let paragraph = doc.GetElement(0);
paragraph.AddText("This section starts with second page number");
paragraph.AddPageBreak();
paragraph.AddText("Third page");
paragraph.AddPageBreak();
paragraph.AddText("Fourth page");
let section = paragraph.GetSection();
section.SetStartPageNumber(2);
let header = section.GetHeader("default", true);
paragraph = header.GetElement(0);
paragraph.AddText("Page #");
paragraph.AddPageNumber();
let footer = section.GetFooter("default", true);
paragraph = footer.GetElement(0);
paragraph.AddText("Page #");
paragraph.AddPageNumber();

在稍后部分,我们将使用此方法设置文档第二页的起始页码。

创建宏

检索文档和节

宏首先通过 Api.GetDocument() 访问活动文档。然后使用 doc.GetSections()[0] 获取第一节,这代表了文档的第一页:

let doc = Api.GetDocument();
let firstSection = doc.GetSections()[0];

配置第一页

// First Page Configuration
firstSection.SetTitlePage(true);
// Remove first page header/footer
firstSection.RemoveHeader("title");
firstSection.RemoveFooter("title");
  • SetTitlePage(true) 将第一页标记为标题页。
  • RemoveHeader(“title”)  RemoveFooter(“title”) 确保标题页上不会显示页眉或页脚。

配置后续页面

// Subsequent Pages Configuration
let finalSection = doc.GetFinalSection();
finalSection.SetStartPageNumber(0); // Sets start page number. Default is 0 => 1st numbered page is 1
  • finalSection 变量代表将应用页眉、页脚和页码编号的节。
  • SetStartPageNumber(0) 确保从第二页开始正确编号,使第一个编号页面为“1”。

配置页眉

// Header Configuration
let header = finalSection.GetHeader("default", true);
const headerText = header.GetElement(0);
headerText.AddPageNumber();// Choose header justification (uncomment one):
//headerText.SetJc("left"); // Left alignment 
headerText.SetJc("center"); // Center alignment 
//headerText.SetJc("right"); // Right alignment
  • GetHeader(“default”, true) 获取该节的页眉。
  • 使用 GetElement(0) 访问页眉的第一个元素。
  • AddPageNumber() 插入动态页码。
  • SetJc() 方法定义页眉文本的对齐方式,可将其定位到左侧、居中或右侧。

配置页脚

// Footer Configuration - uncomment for inserting a page number in the footer
let footer = finalSection.GetFooter("default", true);
const footerText = footer.GetElement(0);
footerText.AddPageNumber();// Choose footer justification (uncomment one):
// footerText.SetJc("left");    // Left alignment
footerText.SetJc("center");  // Center alignment
// footerText.SetJc("right");   // Right alignment
  • GetFooter(“default”, true) 获取该节的页脚。
  • 使用 GetElement(0) 访问页脚的第一个元素。
  • AddPageNumber() 在页脚中插入动态页码。
  • SetJc() 方法控制页脚文本的对齐方式,与页眉类似。

注意: 默认情况下,页脚配置已注释。 您只需注释或取消注释相关部分,就可以在页眉、页脚或两者之间切换插入编号。

下面是完整的宏代码:

let doc = Api.GetDocument();
let firstSection = doc.GetSections()[0];// First Page Configuration
firstSection.SetTitlePage(true);
// Remove first page header/footer
firstSection.RemoveHeader("title");
firstSection.RemoveFooter("title");// Subsequent Pages Configuration
let finalSection = doc.GetFinalSection();
finalSection.SetStartPageNumber(0); // Sets start page number. Default is 0 => 1st numbered page is 1// Header Configuration
let header = finalSection.GetHeader("default", true);
const headerText = header.GetElement(0);
headerText.AddPageNumber();// Choose header justification (uncomment one):
//headerText.SetJc("left"); // Left alignment 
headerText.SetJc("center"); // Center alignment 
//headerText.SetJc("right"); // Right alignment// Footer Configuration - uncomment for inserting a page number in the footer
// let footer = finalSection.GetFooter("default", true);
// const footerText = footer.GetElement(0);
// footerText.AddPageNumber();// Choose footer justification (uncomment one):
// footerText.SetJc("left");    // Left alignment
// footerText.SetJc("center");  // Center alignment
// footerText.SetJc("right");   // Right alignment

我们希望这个宏能帮助您简化工作中的重复任务。ONLYOFFICE 宏旨在简化您的工作并提高效率。我们鼓励您探索我们广泛的 API 库并创建适合您需求的自定义宏。如果您有任何想法或建议,请随时联系我们。我们始终欢迎新想法和合作!祝您探索愉快!

立即获取 ONLYOFFICE 

立即下载适用于 Windows、macOS 或 Linux 的 ONLYOFFICE 桌面编辑器,或注册一个免费的协作空间帐户,使用宏帮你提升工作效率!

如果您希望集成 ONLYOFFICE 并进行个性化的商业部署,可以选择我们的开发者版本。我们支持所有编程语言和任意部署模式,并选择定制品牌标识。点击下方链接,申请免费试用30天:

下载 ONLYOFFICE 服务器解决方案,并以您的品牌提供给您的客户 | ONLYOFFICEhttps://www.onlyoffice.com/zh/download-developer.aspx?from=downloadintegrationmenu#docs-developer?utm_source=csdn&utm_medium=article&utm_campaign=insert_custom_page_numbering相关链接

ONLYOFFICE API 方法

GitHub 中的 ONLYOFFICE 

更多关于 ONLYOFFICE 宏的用法

GitHub 中的 ONLYOFFICE 


http://www.ppmy.cn/ops/160466.html

相关文章

通信系统中物理层与网络层联系与区别

在通信系统中,物理层和网络层是OSI(开放系统互连)模型中的两个重要层次,分别位于协议栈的最底层和第三层。它们在功能、职责和实现方式上有显著的区别,但同时也在某些方面存在联系。以下是物理层与网络层的联系与区别的…

如何调用 DeepSeek API:详细教程与示例

目录 一、准备工作 二、DeepSeek API 调用步骤 1. 选择 API 端点 2. 构建 API 请求 3. 发送请求并处理响应 三、Python 示例:调用 DeepSeek API 1. 安装依赖 2. 编写代码 3. 运行代码 四、常见问题及解决方法 1. API 调用返回 401 错误 2. API 调用返回…

在本地使用 Llama 3.2-Vision:分步指南

通过直观的用户界面或强大的端点服务,在本地与先进的多模态 Llama 模型进行交互。 Llama 3.2-Vision 是一个强大的多模态模型,能够处理文本和图像数据。它具有 110 亿(11B)和 900 亿(90B)参数规模&#xff…

《重构-》

一、代码坏的味道 神秘命名 ​​​​​代码应该直观明了。要深思熟虑如何给函数、模块、变量和类命名,使它们能清晰地表明 自己的功能和用法。 重复代码 一旦有重复代码存在,阅读这些重复的代码时你就必须加倍仔细,留意其间细微的差异。如果…

spring笔记

文章目录 spring笔记 Spring家族spring六大模块 spring笔记 Spring家族 spring中什么是bean? 为什么你在controller层中直接使用一个Autowire注解就能调用service层的属性和方法 这个功劳就要归功于spring IOC容器,我们在service层加上Service注解&#xff0c…

Docker 的安全配置与优化(一)

引言 在当今快速发展的云计算和 DevOps 时代,Docker 作为容器化技术的佼佼者,已经成为现代开发和运维的基石。它以其独特的优势,如环境隔离、快速部署、资源高效利用等,极大地改变了软件交付和运行的方式。在微服务架构中&#x…

10亿数据,如何做迁移?

前言 某次金融系统迁移项目中,原计划8小时完成的用户数据同步迟迟未能完成。 24小时后监控警报显示:由于全表扫描SELECT * FROM users导致源库CPU几乎熔毁,业务系统被迫停机8小时。 这让我深刻领悟到——10亿条数据不能用蛮力搬运&#xf…

Linux----线程

一、基础概念对比 特性进程 (Process)线程 (Thread)资源分配资源分配的基本单位(独立地址空间)共享进程资源调度单位操作系统调度单位CPU调度的最小单位创建开销高(需复制父进程资源)低(共享进程资源)通信…