问题描述
我们有一个很长的Adobe Dynamic XML Form PDF表单,该表单在Adobe LiveCycle中构建/编码。最近对其进行了编辑,并插入了新的其他页面,现在该表单的某些代码已损坏,因为某些对象的页面编号与以前不同。特别是,代码中对对象的某些引用是通过xfa.resolveNode()函数进行的,该函数带有一个参数,例如“ form1.page1.ObjectName”。因此,我需要更新这些参数以引用正确的页码才能修复代码。
手动更正所有这些参考将花费很长时间,并且容易出错。有没有一种方法可以收集原始表单和新表单中的所有对象的页码(在Acrobat或LiveCycle中,或使用Python或其他东西),因此我可以轻松地使用Excel进行比较并确定我需要的引用改变?
在此特定表单中,所有项目都位于单个表单对象(form1)的后面,并且位于page1到page25的不同页面上。因此,我可以通过某种方式直接从LiveCycle或Acrobat中按页面编号吐出对象名称,和/或在XML中的页面之间循环(例如使用Python),并收集对象名称及其页面编号。我在寻找。
解决方法
这是一种显示页面或其他对象(包括页面编号)的字段的方法。
在此示例中,我有2页(p1
和p2
):
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,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;
}