0

as3がバックグラウンドで何かをしていることを知りたいです。私の正確な問題は、xml をインポートする直前に、indesign SDK を使用してドキュメントをパッケージ化しようとしていることです。問題は、パッケージ化するときにドキュメントを保存できないことです。インポートはまだ準備ができていません。これはコードです:

    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

ワークフローの最後の xmlElement の有効性を確認する while ループを試すか、できない間にドキュメントを保存してから、パッケージ化が可能になったら試してみてください。

タイマーを追加して、パッケージング プロセスに一時停止を追加できます。

また

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

また

function checkIfPackageable() { try { doc.save(); 戻る; } catch(e) { checkIfPackageable(); } }

しかし、より良いオプションかもしれません。

それが役に立てば幸い、

ロイク

于 2012-06-20T20:06:42.873 に答える