以 PDF 形式收集对象的页码

Collect page numbers of objects in a PDF form

我们在 Adob​​e LiveCycle 中有一个很长的 Adob​​e Dynamic XML Form PDF 表单 built/coded。它最近被编辑并插入了新的附加页面,现在一些表单的编码被破坏了,因为一些对象的页码与以前不同。特别是,代码中对对象的一些引用是通过 xfa.resolveNode() 函数进行的,该函数采用诸如“form1.page1.ObjectName”之类的参数。所以我需要更新这些参数以引用正确的页码以修复代码。

手动更正所有这些引用将花费很长时间并且容易出错。有没有办法收集原始表格和新表格中所有对象的页码(在 Acrobat 或 LiveCycle 中,或使用 Python 或其他东西),所以我可以轻松地使用 Excel 进行比较那些并确定我需要更改的引用?

在这个特定的表单中,所有项目都在一个表单对象 (form1) 后面,并且位于从 page1 到 page25 的不同页面上。因此,有些方法可以直接从 LiveCycle 或 Acrobat 按页码吐出对象名称,and/or 循环遍历 XML 中的页面(例如,使用 Python)并收集对象名称及其页码,正是我要找的。

这是一种显示页面或其他对象(包括页码)字段的方法。
在此示例中,我有 2 页(p1p2):

JavaScript 打开一个对话框,其中包含您可以直接复制并粘贴到您选择的工具 (p1) 中的所有字段路径: (p2):
只需在任何地方执行此代码,例如将它放在 initialize 事件中,调整第一行的页面,对话框就会出现。 免责声明:这段代码绝不是漂亮的,我只是把我从不同项目中得到的一些片段放在一起。

var page = p1;
var allFields = [];
var collectPath = function(field) {
    if (field.className === "field") {
        allFields.push(field.somExpression);
    }
}
iterateThrough(page, collectPath, 25);
var dialog = createDialog(allFields.join("\n"));
app.execDialog(dialog);

function iterateThrough(myParentObject, doSomething, levels) {
    var levelCount = 1;
    var maxCount = levels;

    function loopThrough(parent, doSomething, level) {
        var allChildElements;
        var intNumElements;
        var currentElement;
        var j;

        allChildElements = parent.nodes;
        intNumElements = allChildElements.length;

        for (j = 0; j < intNumElements; j++) {
            currentElement = allChildElements.item(j);
            doSomething(currentElement, j, allChildElements);
            if (currentElement.className === "subform") {
                if (level < maxCount) {
                    loopThrough(currentElement, doSomething, (level + 1));
                }
            }
        }
    }

    loopThrough(myParentObject, doSomething, levelCount);
}

function createDialog(msg) {
    var width = 400;
    var infoTextHeight = 150;

    var dialog = {
        description: {
            name: "Test",
            width: width,
            height: 200,
            elements: [{
                type: "view",
                elements: [{
                        type: "cluster",
                        align_children: "align_row",
                        name: "Felder",
                        font: "heading",
                        elements: [{
                             width: width,
                            height: infoTextHeight,
                            type: "edit_text",
                            multiline: true,
                            item_id: "NAME"
                        }]
                    },
                    {
                        type: "view",
                        alignment: "align_center",
                        elements: [{
                            type: "ok",
                            alignment: "align_center"
                        }]
                    }
                ]
            }]
        },
        initialize: function (dialog) {
            dialog.visible({
                ERR1: false
            });
            dialog.load({
                NAME: msg
            });
        },
        commit: function (dialog) {
            dialog.end();
        }
    };
    return dialog;
}