1

現在アクティブなドキュメントのサブセットから新しいドキュメントを作成する非常に単純な ExtendScript スクリプトがあります。

var sourceDocument = app.activeDocument;
var i, j;

for(i = 0; i < sourceDocument.layers.length; i++) {
  sourceDocument.layers.item(i).locked = false;
}
for(i = 0; i < sourceDocument.spreads.length; i++) {
  for(j = 0; j < sourceDocument.spreads.item(i).textFrames.length; j++) {
    if(sourceDocument.spreads.item(i).textFrames.item(j).locked) {
      sourceDocument.spreads.item(i).textFrames.item(j).locked = false;
    }
  }
}

var destDocument = app.documents.add();
var firstPageIndex = 0; // In the actual script, this is chosen by the user.
var lastPageIndex = 5; // In the actual script, this is chosen by the user.

destDocument.importStyles(ImportFormat.paragraphStylesFormat, new File(sourceDocument.filePath + "/" + sourceDocument.name), GlobalClashResolutionStrategy.LOAD_ALL_WITH_OVERWRITE);
destDocument.importStyles(ImportFormat.characterStylesFormat, new File(sourceDocument.filePath + "/" + sourceDocument.name), GlobalClashResolutionStrategy.LOAD_ALL_WITH_OVERWRITE);
destDocument.viewPreferences.horizontalMeasurementUnits = sourceDocument.viewPreferences.horizontalMeasurementUnits;
destDocument.viewPreferences.verticalMeasurementUnits = sourceDocument.viewPreferences.verticalMeasurementUnits;
destDocument.documentPreferences.facingPages = sourceDocument.documentPreferences.facingPages;
destDocument.documentPreferences.pageHeight = sourceDocument.documentPreferences.pageHeight;
destDocument.documentPreferences.pageWidth = sourceDocument.documentPreferences.pageWidth;
destDocument.documentPreferences.pageSize = sourceDocument.documentPreferences.pageSize;
destDocument.documentPreferences.allowPageShuffle = true;

var range = sourceDocument.pages.itemByRange(firstPageIndex, lastPageIndex);
range.duplicate(LocationOptions.AFTER, destDocument.pages[destDocument.pages.length - 1]);
destDocument.pages[0].remove(); // An empty spread containing an empty page is added when the new document is created and we cannot remove it before other pages are inserted (Documents must have at least one page)

このスクリプトは、多くのドキュメントで完全に機能します。しかし、特定のドキュメント (foo.indd と呼びましょう) に対して実行すると、InDesign は複製の実行時に応答しなくなります: range.duplicate(LocationOptions.AFTER, destDocument.pages[destDocument.pages.length - 1]);. それ以降、私にできることは InDesign を強制的に終了させることだけです。

これは InDesign のバグですか? この特定のドキュメントのどの部分が問題を引き起こしているかを見つけるにはどうすればよいですか?

4

2 に答える 2

0

このスクリプトを問題のあるファイルで試してみてください。失敗した場合は、デスクトップに生成されたはずのレポートを確認してください。

http://www.loicaigon.com/downloads/cloneDocument.jsx

Loic http://www.loicaigon.com

于 2012-06-19T17:23:49.507 に答える
0

あなたの例で何が悪いのかは本当に言えませんが、indesignがハングした場合、それはループが原因である可能性があります(無限とそれを超えて:))

そのため、InDesign の再計算を避けるためにループ制限を出力することで問題を回避しようとする場合があります。

var limit = …
for ( i = 0; i<limit ; i++)…

さらに、コンソールに情報を書き込んで、InDesign が実際にスタックしている場所に関する情報を取得することもできます。そのため、レポート ファイルにその場で情報を書き込めば、最終的に問題の領域を特定できる可能性があります。

また、すべての重要な項目を調べて、ファイルに問題があるかどうかを確認することもできます。

最後になりましたが、このファイルの idml への手動エクスポートを試し、再度開いてスクリプトを再度実行してください。ファイルがぎこちなくなり、idml を渡すとほとんどのファイルが修正されることがあります。

于 2012-06-06T18:32:58.990 に答える