ну тогда как то так//ImageCatalog.jsx
//An InDesign JavaScript
/*
@@@BUILDINFO@@@ "ImageCatalog.jsx" 3.0.0 15 December 2009
*/
//Creates an image catalog from the graphic files in a selected folder.
//Each file can be labeled with the file name, and the labels are placed on
//a separate layer and formatted using a paragraph style ("label") you can
//modify to change the appearance of the labels.
//
//For more on InDesign/InCopy scripting see the documentation included in the Scripting SDK
//available at http://www.adobe.com/devnet/indesign/sdk.html
//Or visit the InDesign Scripting User to User forum at http://www.adobeforums.com .
//
//The myExtensions array contains the extensions of the graphic file types you want
//to include in the catalog. You can remove extensions from or add extensions to this list.
//myExtensions is a global. Mac OS users should also look at the file types in the myFileFilter function.
main();
function main(){
var myFilteredFiles;
//Make certain that user interaction (display of dialogs, etc.) is turned on.
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;
myExtensions = [".jpg", ".jpeg", ".eps", ".ps", ".pdf", ".tif", ".tiff", ".gif", ".psd", ".ai", ".png"]
//Display the folder browser.
var myFolder = Folder.selectDialog("Select the folder containing the images", "");
//Get the path to the folder containing the files you want to place.
if(myFolder != null){
if(File.fs == "Macintosh"){
myFilteredFiles = myMacOSFileFilter(myFolder);
}
else{
myFilteredFiles = myWinOSFileFilter(myFolder);
}
if(myFilteredFiles.length != 0){
myDisplayDialog(myFilteredFiles, myFolder);
alert("Done!");
}
}
}
//Windows version of the file filter.
function myWinOSFileFilter(myFolder){
var myFiles = new Array;
var myFilteredFiles = new Array;
for(myExtensionCounter = 0; myExtensionCounter < myExtensions.length; myExtensionCounter++){
myExtension = myExtensions[myExtensionCounter];
myFiles = myFolder.getFiles("*"+ myExtension);
if(myFiles.length != 0){
for(var myFileCounter = 0; myFileCounter < myFiles.length; myFileCounter++){
myFilteredFiles.push(myFiles[myFileCounter]);
}
}
}
return myFilteredFiles;
}
function myMacOSFileFilter(myFolder){
var myFilteredFiles = myFolder.getFiles(myFileFilter);
return myFilteredFiles;
}
//Mac OS version of file filter
//Have to provide a separate version because not all Mac OS users use file extensions
//and/or file extensions are sometimes hidden by the Finder.
function myFileFilter(myFile){
var myFileType = myFile.type;
switch (myFileType){
case "JPEG":
case "EPSF":
case "PICT":
case "TIFF":
case "8BPS":
case "GIFf":
case "PDF ":
case "PNG":
return true;
break;
default:
for(var myCounter = 0; myCounter<myExtensions.length; myCounter++){
var myExtension = myExtensions[myCounter];
if(myFile.name.indexOf(myExtension)>-1){
return true;
break;
}
}
}
return false;
}
function myGetParagraphStyleNames(myDocument){
var myStyleNames = new Array;
var myAddLabelStyle = true;
for(var myCounter = 0; myCounter < myDocument.paragraphStyles.length; myCounter++){
myStyleNames.push(myDocument.paragraphStyles.item(myCounter).name);
if (myDocument.paragraphStyles.item(myCounter).name == "Labels"){
myAddLabelStyle = false;
}
}
if(myAddLabelStyle == true){
myStyleNames.push("Labels");
}
return myStyleNames;
}
function myDisplayDialog(myFiles, myFolder){
var myLabelWidth = 112;
var myStyleNames = myGetParagraphStyleNames(app);
var myLayerNames = ["Layer 1", "Labels"];
var myDialog = app.dialogs.add({name:"Image Catalog"});
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
staticTexts.add({staticLabel:"Information:"});
}
with(borderPanels.add()){
with(dialogColumns.add()){
with(dialogRows.add()){
staticTexts.add({staticLabel:"Source Folder:", minWidth:myLabelWidth});
staticTexts.add({staticLabel:myFolder.path + "/" + myFolder.name});
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"Number of Images:", minWidth:myLabelWidth});
staticTexts.add({staticLabel:myFiles.length + ""});
}
}
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"Options:"});
}
with(borderPanels.add()){
with(dialogColumns.add()){
with(dialogRows.add()){
staticTexts.add({staticLabel:"Number of Rows:", minWidth:myLabelWidth});
var myNumberOfRowsField = integerEditboxes.add({editValue:3});
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"Number of Columns:", minWidth:myLabelWidth});
var myNumberOfColumnsField = integerEditboxes.add({editValue:3});
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"Frame width (mm):", minWidth:myLabelWidth});
//var myHorizontalOffsetField = measurementEditboxes.add({editValue:120, editUnits:MeasurementUnits.points});
var myFrameWidthField = measurementEditboxes.add({editValue:210, editUnits:MeasurementUnits.MILLIMETERS});
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"Frame height (mm):", minWidth:myLabelWidth});
//var myVerticalOffsetField = measurementEditboxes.add({editValue:240, editUnits:MeasurementUnits.points});
var myFrameHeightField = measurementEditboxes.add({editValue:297, editUnits:MeasurementUnits.MILLIMETERS});
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"", minWidth:myLabelWidth});
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"Frame offset hor. (mm):", minWidth:myLabelWidth});
var myFrameOffsetHorField = measurementEditboxes.add({editValue:0, editUnits:MeasurementUnits.MILLIMETERS});
}
with(dialogRows.add()){
staticTexts.add({staticLabel:"Frame offset vert. (mm):", minWidth:myLabelWidth});
var myFrameOffsetVertField = measurementEditboxes.add({editValue:0, editUnits:MeasurementUnits.MILLIMETERS});
}
with (dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Additional:", minWidth:myLabelWidth});
}
with(dialogColumns.add()){
var myFitProportionalCheckbox = checkboxControls.add({staticLabel:"Proportional", checkedState:false});
var myFitCenterContentCheckbox = checkboxControls.add({staticLabel:"Center content to frame", checkedState:true});
var myFitFrameToContentCheckbox = checkboxControls.add({staticLabel:"Justify frame to content", checkedState:false});
}
}
with(dialogRows.add()){
var myRemoveEmptyFramesCheckbox = checkboxControls.add({staticLabel:"Remove Empty Frames:", checkedState:true});
}
}
}
var myResult = myDialog.show();
if(myResult == true){
var myNumberOfRows = myNumberOfRowsField.editValue;
var myNumberOfColumns = myNumberOfColumnsField.editValue;
var myRemoveEmptyFrames = myRemoveEmptyFramesCheckbox.checkedState;
var myFitProportional = myFitProportionalCheckbox.checkedState;
var myFitCenterContent = myFitCenterContentCheckbox.checkedState;
var myFitFrameToContent = myFitFrameToContentCheckbox.checkedState;
var myFrameWidth = myFrameWidthField.editValue;
var myFrameHeight = myFrameHeightField.editValue;
var myFrameOffsetVert = myFrameOffsetVertField.editValue;
var myFrameOffsetHor = myFrameOffsetHorField.editValue;
myDialog.destroy();
myMakeImageCatalog(myFiles, myNumberOfRows, myNumberOfColumns, myRemoveEmptyFrames, myFitProportional, myFitCenterContent, myFitFrameToContent, myFrameWidth, myFrameHeight, myFrameOffsetVert, myFrameOffsetHor);
}
else{
myDialog.destroy();
}
}
}
function myMakeImageCatalog(myFiles, myNumberOfRows, myNumberOfColumns, myRemoveEmptyFrames, myFitProportional, myFitCenterContent, myFitFrameToContent, myFrameWidth, myFrameHeight, myFrameOffsetVert, myFrameOffsetHor)
{
var myPage, myFile, myCounter, myX1, myY1, myX2, myY2, myRectangle;
var myParagraphStyle, myError;
var myFramesPerPage = myNumberOfRows * myNumberOfColumns;
//var myDocument = app.documents.add();
var myDocument = app.activeDocument;
myDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points;
myDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points;
var myDocumentPreferences = myDocument.documentPreferences;
var myNumberOfFrames = myFiles.length;
var myNumberOfPages = Math.round(myNumberOfFrames / myFramesPerPage);
if ((myNumberOfPages * myFramesPerPage) < myNumberOfFrames){
myNumberOfPages++;
}
myDocumentPreferences.pagesPerDocument = myNumberOfPages;
myDocumentPreferences.facingPages = false;
var myPage = myDocument.pages.item(0);
var myMarginPreferences = myPage.marginPreferences;
var myLeftMargin = myMarginPreferences.left;
var myTopMargin = myMarginPreferences.top;
var myRightMargin = myMarginPreferences.right;
var myBottomMargin = myMarginPreferences.bottom;
var myLiveWidth = myDocumentPreferences.pageWidth - (myLeftMargin + myRightMargin);
var myLiveHeight = myDocumentPreferences.pageHeight - (myTopMargin + myBottomMargin);
var myRowOffset = myFrameOffsetVert;
var myColOffset = myFrameOffsetHor;
var myCenteredLeftMargin = (myLiveWidth - ( myFrameWidth*myNumberOfColumns + myColOffset*(myNumberOfColumns-1) ) )/2 + myLeftMargin;
var myCenteredTopMargin = (myLiveHeight - ( myFrameHeight*myNumberOfRows + myRowOffset*(myNumberOfRows-1) ) )/2 + myTopMargin;
var myColumnWidth = myFrameWidth;
var myRowHeight = myFrameHeight;
var myPages = myDocument.pages;
// Construct the frames in reverse order. Don't laugh--this will
// save us time later (when we place the graphics).
for (myCounter = myDocument.pages.length-1; myCounter >= 0; myCounter--){
myPage = myPages.item(myCounter);
for (var myRowCounter = myNumberOfRows; myRowCounter >= 1; myRowCounter--){
myY1 = myCenteredTopMargin + (myRowHeight * (myRowCounter-1)) + (myRowOffset * (myRowCounter-1));
myY2 = myY1 + myFrameHeight;
for (var myColumnCounter = myNumberOfColumns; myColumnCounter >= 1; myColumnCounter--){
myX1 = myCenteredLeftMargin + (myColumnWidth * (myColumnCounter-1)) + (myColOffset * (myColumnCounter-1));
myX2 = myX1 + myFrameWidth;
myRectangle = myPage.rectangles.add(myDocument.layers.item(-1), undefined, undefined, {geometricBounds:[myY1, myX1, myY2, myX2], strokeWeight:0, strokeColor:myDocument.swatches.item("None")});
}
}
}
// Because we constructed the frames in reverse order, rectangle 1
// is the first rectangle on page 1, so we can simply iterate through
// the rectangles, placing a file in each one in turn. myFiles = myFolder.Files;
for (myCounter = 0; myCounter < myNumberOfFrames; myCounter++){
myFile = myFiles[myCounter];
myRectangle = myDocument.rectangles.item(myCounter);
myRectangle.place(File(myFile));
myRectangle.label = myFile.fsName.toString();
//Apply fitting options as specified.
if(myFitProportional){
myRectangle.fit(FitOptions.proportionally);
}
if(myFitCenterContent){
myRectangle.fit(FitOptions.centerContent);
}
if(myFitFrameToContent){
myRectangle.fit(FitOptions.frameToContent);
}
}
if (myRemoveEmptyFrames == 1){
for (var myCounter = myDocument.rectangles.length-1; myCounter >= 0;myCounter--){
if (myDocument.rectangles.item(myCounter).contentType == ContentType.unassigned){
myDocument.rectangles.item(myCounter).remove();
}
else{
//As soon as you encounter a rectangle with content, exit the loop.
break;
}
}
}
}
ps/криво сделал bbcode в посте)