【问题标题】:Collect page numbers of objects in a PDF form在 PDF 表单中收集对象的页码
【发布时间】:2020-11-02 20:55:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: xml pdf acrobat livecycle-designer


    【解决方案1】:

    这是一种显示页面字段或其他对象(包括页码)的方法。
    在此示例中,我有 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-11-05
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      相关资源
      最近更新 更多