0

我想知道 as3 正在做的是在 bakground 中做任何事情。我的确切问题是我正在尝试使用 indesign sdk 打包文档,就在此之前我正在导入 xml,问题是打包时无法保存文档,我很确定这是因为导入还没有准备好。这是代码:

    IDScriptingEventAdapter.getInstance().addEventListener(Document.AFTER_IMPORT, afterImport);         
    document.xmlElements.item(0).xmlElements.item("test").importXML(File.applicationStorageDirectory.resolvePath("temp/styles.xml"));

public function afterImport(event:ImportExportEvent):void {
            var docPackaged:Boolean=app.activeDocument.packageForPrint(packagePath, true, true, true, true, true, true, true);
        }

如您所见,使用Document.AFTER_IMPORT侦听器调用该函数,但由于某种原因,它很快就会被触发。

经过一些测试后,我注意到导入已完成,但在处理程序执行时 xmlElements 尚未到位。结果,文档在打包时还没有准备好,因此无法保存文档。

我得到的正确错误是:

Cannot save a copy of “CataloogCS5.indd”.\n 

那么有没有办法可以查看 AS 是否不再做任何事情(添加了所有 xmlElements)或其他解决方案来解决我的问题?

4

1 回答 1

0

也许您可以尝试使用 while 循环检查工作流程中最后一个 xmlElement 的有效性,或者尝试在无法保存文档的情况下保存文档,然后一旦可以进行打包?

您可以添加一个计时器以在打包过程中添加暂停。

或者

while ( !doc.xmlElements[0].xmlElements[-1].isValid ){ //wait }

或者

函数 checkIfPackageable() { 尝试 { doc.save(); 返回; } 捕捉(e) { checkIfPackageable(); } }

不过可能是更好的选择。

希望能帮助到你,

洛伊克

于 2012-06-20T20:06:42.873 回答