收集PDF格式的对象的页码

问题描述

我们有一个很长的Adobe Dynamic XML Form PDF表单,该表单在Adobe LiveCycle中构建/编码。最近对其进行了编辑,并插入了新的其他页面,现在该表单的某些代码已损坏,因为某些对象的页面编号与以前不同。特别是,代码中对对象的某些引用是通过xfa.resolveNode()函数进行的,该函数带有一个参数,例如“ form1.page1.ObjectName”。因此,我需要更新这些参数以引用正确的页码才能修复代码。

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

在此特定表单中,所有项目都位于单个表单对象(form1)的后面,并且位于page1到page25的不同页面上。因此,我可以通过某种方式直接从LiveCycle或Acrobat中按页面编号吐出对象名称,和/或在XML中的页面之间循环(例如使用Python),并收集对象名称及其页面编号。我在寻找。

解决方法

这是一种显示页面或其他对象(包括页面编号)的字段的方法。
在此示例中,我有2页(p1p2):
Example Hierarchy
JavaScript将打开一个对话框,其中包含所有字段路径,您可以直接将它们复制并粘贴到所选工具(p1)中: p1 (p2): p2
只需在任何地方执行此代码,例如将其放置在initialize事件中,在第一行中调整页面,对话框将显示出来。 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,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,(level + 1));
                }
            }
        }
    }

    loopThrough(myParentObject,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;
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...