PAYATHON 2026

如何在 InDesign 父版页中同时设置分节页码和全文连续页码?

数据小陈

可以实现,但第二套页码需要单独生成

可以保留 MD-23、DS-58 等现有分节页码,再用脚本批量写入全文连续页码。第二套页码的位置和样式由父版页统一设置,数字由脚本按页面在文档中的实际顺序填写。

如果只在父版页上再插入一个 Current Page Number 标记,得到的仍是当前分节的页码。两个相同标记无法分别采用分节编号和全文编号。当前页码标记的用法可参见 Adobe 页码说明。

下面的方案适用于各分节已合并在同一个 InDesign 文档中的情况。

为什么切换 Absolute Numbering 没有效果?

首选项中的 Absolute Numbering 控制 Pages 面板和窗口底部页码框的显示方式,以及打印或导出时页面范围的引用方式。它不会改变排版页面上显示的页码,因此无法直接生成第二套可见页码。Adobe 对该设置的说明

在父版页中准备第二套页码

  1. 保留现有分节设置和显示分节页码的文本框。
  2. 在需要使用的父版页上,新建一个独立、未编组、未串接的文本框,专门放全文连续页码。
  3. 在框内输入占位数字,例如 000,设置字体、段落样式和位置,并预留足够宽度。
  4. 选中文本框,在 Window > Utilities > Script Label 面板中,将脚本标签设置为 absolute_page_number。这里设置的是 Script Label,不是 Layers 面板中的对象名称。
  5. 如果父版跨页包含左右两页,分别在两侧设置对应文本框。其他需要显示全文页码的父版也要做同样设置。
  6. 确保文本框允许覆盖父版项目,且文本框及其所在图层未锁定。

脚本会在文档页上覆盖指定的父版文本框,再写入数字。覆盖父版项目后,可以单独修改其内容;相关行为见 Adobe 父版项目说明。

用脚本批量填写全文页码

下面的脚本使用 ExtendScript。将其保存为 .jsx 文件后,通过 InDesign 的 Scripts 面板运行。脚本只处理标签为 absolute_page_number 的文本框,因此不要将该标签用于其他内容。

#target indesign

(function () {
    if (app.documents.length === 0) {
        alert("Open a document first.");
        return;
    }

    var doc = app.activeDocument;
    var label = "absolute_page_number";
    var updated = 0;
    var missing = 0;

    for (var i = 0; i < doc.pages.length; i++) {
        var page = doc.pages.item(i);
        var parentItems = page.masterPageItems;

        // Create editable page copies of the labeled parent frames.
        for (var j = 0; j < parentItems.length; j++) {
            var item = parentItems[j];
            if (item.label === label) {
                var localFrame = item.override(page);
                localFrame.label = label;
            }
        }

        // Update both newly overridden and existing labeled frames.
        var found = false;
        for (var k = 0; k < page.textFrames.length; k++) {
            var frame = page.textFrames.item(k);
            if (frame.label === label) {
                frame.contents = String(page.documentOffset + 1);
                found = true;
            }
        }

        if (found) {
            updated++;
        } else {
            missing++;
        }
    }

    alert("Updated pages: " + updated + "\nPages without a labeled frame: " + missing);
}());

page.documentOffset 是页面在整份文档中的顺序偏移,第一页为 0。加 1 后,就得到从第一页开始计算的全文页码。脚本通过 masterPageItems 找到尚未覆盖的父版项目,并调用 override(page) 创建可编辑的页面副本。相关接口见 Adobe 的 Page 文档和 TextFrame 文档。

例如,某页的分节页码是 DS-1,但它位于整份文档的第 81 页,第二个文本框就会显示 81。

使用时需要注意什么?

  • 全文页码是脚本写入的普通文本。插入、删除或移动页面后,需要重新运行脚本,导出前也应更新一次。
  • 编号会计算文档中的所有页面,包括封面和空白页。没有放置指定文本框的页面虽然不显示数字,仍占据全文中的页序位置。
  • 未应用相应父版,或父版中缺少指定标签文本框的页面,会计入脚本提示的缺失页数。
  • 覆盖父版项目后,父版占位文字的后续修改不会自动替换这些数字;其他未被覆盖的属性仍可按父版继承规则更新。
  • 该脚本按当前文档计数。如果实际使用的是 Book 中的多个独立 .indd 文件,还需要额外累计前面文件的页数。

代码未在你的实际文档中验证。先在文档副本中运行,检查左右页位置、分节交界处以及三位数以上页码是否溢出,再用于正式文件。

备注:内容仅供参考。