Skip to main content
Participating Frequently
July 11, 2023
Answered

Please let me know what I have to edit any parts (script)

  • July 11, 2023
  • 1 reply
  • 528 views

I just want to export JPEG automatically from multiple Indesign files.

So I try to use scripts but it didn't work.

Could you please let me know which parts have to be edited?

 

This error showed when I used this script.

 

 

Scripts>>

 

 

// 필요한 변수 정의
var indesignFolder, destFolder, pageRange;

// 인디자인 파일이 있는 폴더 선택
indesignFolder = Folder.selectDialog("인디자인 파일이 있는 폴더를 선택하세요.");

// 대상 폴더 선택
destFolder = Folder.selectDialog("JPEG 파일을 저장할 폴더를 선택하세요.");

// 대상 페이지 범위 선택
pageRange = prompt("내보낼 페이지 범위를 입력하세요 (예: 1, 3-5, 8):");

if (indesignFolder && destFolder && pageRange) {
// 인디자인 파일이 있는 폴더 내의 모든 인디자인 파일 가져오기
var files = indesignFolder.getFiles("*.indd");

// 각 인디자인 파일에 대해 작업 수행
for (var f = 0; f < files.length; f++) {
var file = files[f];

// 인디자인 파일 열기
var doc = app.open(file);

// 페이지 범위 파싱 함수
function parsePageRange(rangeString) {
var pages = [];
var ranges = rangeString.split(",");

for (var i = 0; i < ranges.length; i++) {
var range = ranges[i].replace(/^\s+|\s+$/g, ''); // 공백 제거

if (range.indexOf("-") !== -1) {
var startEnd = range.split("-");
var start = parseInt(startEnd[0], 10);
var end = parseInt(startEnd[1], 10);

for (var j = start; j <= end; j++) {
pages.push(j);
}
} else {
var pageNumber = parseInt(range, 10);

if (!isNaN(pageNumber)) {
pages.push(pageNumber);
}
}
}

return pages;
}

// 각 파일에 대해 페이지를 JPEG로 내보냅니다.
for (var i = 0; i < doc.pages.length; i++) {
var currentPage = doc.pages[i];
var pageNumber = i + 1;

if (isPageNumberInArray(parsePageRange(pageRange), pageNumber)) {
// 파일 이름 생성
var fileName = "page_" + pageNumber + ".jpg";

// 파일 저장 경로 생성
var filePath = new File(destFolder.fsName + "/" + fileName);

// JPEG 내보내기 옵션 설정
var exportOptions = new JPEGExportPreferences();
exportOptions.exportingSpread = false;
exportOptions.jpegQuality = JPEGOptionsQuality.maximum;

// 현재 페이지가 일반 페이지 또는 마스터 페이지인 경우에 JPEG로 내보냅니다.
if (currentPage.isValid) {
// 페이지를 JPEG로 내보내기
currentPage.exportFile(ExportFormat.JPG, filePath, false, exportOptions);
}
}
}

// 인디자인 파일 닫기
doc.close(SaveOptions.NO);
}

alert("작업이 완료되었습니다.");
} else {
alert("인디자인 파일이 있는 폴더와 JPEG를 저장할 폴더, 페이지 범위를 모두 선택해야 합니다.");
}

// 페이지 번호가 배열에 포함되어 있는지 확인하는 함수
function isPageNumberInArray(array, pageNumber) {
for (var i = 0; i < array.length; i++) {
if (array[i] === pageNumber) {
return true;
}
}
return false;
}

This topic has been closed for replies.
Correct answer Manan Joshi

oh my god!!

Thank you so much!! 

It worked well!

but, the page range didn't work.

I just want to export 2-3 pages, but this coding exported all pages.

Could you please what I have to edit?


We missed one more property to set without which the pageString property would not have any effect.

app.jpegExportPreferences.jpegExportRange = ExportRangeOrAllPages.EXPORT_RANGE

I have modified your script with the required changes, it should work now

var indesignFolder, destFolder, pageRange;
indesignFolder = Folder.selectDialog("InDesign Folder");
destFolder = Folder.selectDialog("JPEGf Folder");
pageRange = prompt("Pagerange (1, 3-5, 8):");
if (indesignFolder && destFolder && pageRange) {
    var files = indesignFolder.getFiles("*.indd");
    for (var f = 0; f < files.length; f++) {
        var file = files[f];
        var doc = app.open(file);
        function parsePageRange(rangeString) {
            var pages = [];
            var ranges = rangeString.split(",");
            for (var i = 0; i < ranges.length; i++) {
                var range = ranges[i].replace(/^\s+|\s+$/g, ''); // 공백 제거
                if (range.indexOf("-") !== -1) {
                    var startEnd = range.split("-");
                    var start = parseInt(startEnd[0], 10);
                    var end = parseInt(startEnd[1], 10);
                    for (var j = start; j <= end; j++) {
                        pages.push(j);
                    }
                } else {
                    var pageNumber = parseInt(range, 10);
                    if (!isNaN(pageNumber)) {
                        pages.push(pageNumber);
                    }
                }
            }
            return pages;
        }
        for (var i = 0; i < doc.pages.length; i++) {
            var currentPage = doc.pages[i];
            var pageNumber = i + 1;
            if (isPageNumberInArray(parsePageRange(pageRange), pageNumber)) {
                var fileName = "page_" + pageNumber + ".jpg";
                var filePath = new File(destFolder.fsName + "/" + fileName);
                app.jpegExportPreferences.exportingSpread = false;
                app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.maximum;
                app.jpegExportPreferences.jpegExportRange = ExportRangeOrAllPages.EXPORT_RANGE
                app.jpegExportPreferences.pageString = currentPage.name
                doc.exportFile(ExportFormat.JPG, filePath, false);
            }
        }
        doc.close(SaveOptions.NO);
    }
    alert("작업이 완료되었습니다.");
} else {
    alert("인디자인 파일이 있는 폴더와 JPEG를 저장할 폴더, 페이지 범위를 모두 선택해야 합니다.");
}
function isPageNumberInArray(array, pageNumber) {
    for (var i = 0; i < array.length; i++) {
        if (array[i] === pageNumber) {
            return true;
        }
    }
    return false;
}

-Manan

1 reply

Community Expert
July 11, 2023

You don't have to create an object of JPEGExportPreferences. You get a reference to it from the app object. Make the following changes

//Delete the following lines
var exportOptions = new JPEGExportPreferences();
exportOptions.exportingSpread = false;
exportOptions.jpegQuality = JPEGOptionsQuality.maximum;

//Add the following line instead
app.jpegExportPreferences.exportingSpread = false;
app.jpegExportPreferences.jpegQuality = JPEGOptionsQuality.maximum;

-Manan

-Manan
Jade YoonAuthor
Participating Frequently
July 11, 2023

Thank you for your reply!

But, it still showed this error.

 

Community Expert
July 11, 2023

That is because page object does not have the exportFile method. What you should do is to set the pageString property of jpegExportPreferences

app.jpegExportPreferences.pageString = "1"

and then call the exportFile method on the document object

See the following discussions which has code that demonstrates this

https://community.adobe.com/t5/indesign-discussions/script-to-export-individual-pages-with-specific-names-to-jpeg/m-p/12445000#M448388

https://community.adobe.com/t5/indesign-discussions/exporting-high-res-jpeg-from-indesign/m-p/13389719#M505248

-Manan

 

-Manan