以 PDF 形式收集对象的页码
Collect page numbers of objects in a PDF form
我们在 Adobe LiveCycle 中有一个很长的 Adobe 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 页(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, 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;
}
我们在 Adobe LiveCycle 中有一个很长的 Adobe 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 页(p1
和 p2
):
JavaScript 打开一个对话框,其中包含您可以直接复制并粘贴到您选择的工具 (p1) 中的所有字段路径:
只需在任何地方执行此代码,例如将它放在 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;
}