2016-10-25 3 views
0

Это скрипт InDesign для преобразования indd-файлов в jpg, а затем экспорт и переименование их в папку на моем рабочем столе. Все работает отлично, но есть одна часть, которую я пытаюсь сделать, которая только экспортирует страницы, на которых не применяется Мастер-страница «H-Advertising». Я написал инструкцию if, которая проверяет, какая главная страница была применена к текущей странице текущего документа, и должна якобы экспортировать только эту страницу, если у нее не было «H-Advertising», применяемого в качестве главной страницы. Я знаю, что цикл работает, если я добавляю другое условие (например, если (3! = 4)), и он также может предупреждать основную страницу каждой страницы, но она, похоже, идет вперед и добавляет страницу в массив страниц, которые я хочу экспортировать, несмотря ни на что.Почему инструкция if не выполняется корректно, даже если условие выполнено?

Main(); 

    function Main() { 
    // Check to see whether any InDesign documents are open. 
    // If no documents are open, display an error message. 
    if (app.documents.length > 0) { 
    app.jpegExportPreferences.exportingSpread = false; 

    //makes sure there is a book open 
    if (app.books.length != 1) 
     alert("This only works when you have one (1) book open and the  first file in that book open"); 
    else 

    //loop through the book's stories 
     for (b = 0; b < app.books[0].bookContents.length; b++) { 
     // initialize pages variable 
     var pages = []; 
     // loop through the pages in the active document 
     for (i = 0; i < app.activeDocument.pages.length; i++) { 

     // initialize variable holding document name, and then rename as follows 
     var myDocumentName = app.books[0].bookContents[b].fullName; 
     c = app.open(app.books[0].bookContents[b].fullName); 
     myDocumentName = myDocumentName.name.replace("indd", "jpg"); 
     myDocumentName = myDocumentName.replace("WN16", "WN16_"); 

     // get value of the current page's applied master 
     if (app.activeDocument.pages[i].appliedMaster != null) { 
     var appliedMaster = app.activeDocument.pages[i].appliedMaster.name; 
     } 


     // if it's not an advertising page, get the page number and add it to an array containing page numbers to export 
    if (appliedMaster !== "H-ADVERTISING" && appliedMaster!= "[None]" && appliedMaster!= null) { 
     alert(appliedMaster); 
     pages.push(app.activeDocument.pages[i].name); 
     printpages = pages.join(","); 
     // set the pageString of pages to export as jpegs 
     app.jpegExportPreferences.pageString = printpages; 
     // export all the pages using the export page range page string 
     c.exportFile(ExportFormat.JPG, File(Folder.desktop + "/EDIT_Jpgs/" + myDocumentName)); 

    } 

     } 

    }; 
+0

Итак, просто с первого взгляда, _possible_, вы сталкиваетесь с проблемами вокруг единственного равного а не сравнение ('! =') вместо двойного равного не сравнения ('! =='). Первый делает автоматическое преобразование типов под капотом, что может дать неожиданные результаты. Это просто попытка попробовать, но я не делал тщательного анализа вашего кода. –

+5

нет такой вещи, как «if loop» - просто sayin –

+0

Также попробуйте записать переменную applyMaster в журнал или оповещение и сравнить ее ... убедитесь, что это все прописные и лишние пробелы и т. Д.? (чтобы соответствовать вашему ожиданию того, что должно быть) –

ответ

0

Примечание: Свойство «pageString» действует, когда диапазон экспорта JPEG не все так - просто чтобы быть уверенным - вы, возможно, потребуется установить app.jpegExportPreferences.jpegExportRange к . ExportRangeOrAllPages.EXPORT_RANGE '

Примечание2: Считает, что книга может быть открыта без открытых документов или ActiveDocument может быть из-за пределы app.books [0] ==> в этом случае вашего цикл для (I = 0; я < app.activeDocument .pages.length; i ++) может привести к неправильным значениям, привести к тому, что целевой документ открывается ... ins ide этот цикл.

Ярек

0

Хорошо, скрипт работает теперь, после того как я обновил в InDesign 2017. Итак, на самом деле не ответ, кроме там, должно быть, ошибка в программе InDesign. Единственное, что я подправить в коде, чтобы добавить этот

 if (app.activeDocument.pages[i].appliedMaster !== null && app.activeDocument.pages[i].appliedMaster!== "H-ADVERTISING" && app.activeDocument.pages[i].appliedMaster!==null) { 
      appliedMaster = app.activeDocument.pages[i].appliedMaster.name; 
     } 

ранее в коде, который проверяется фактическое значение главной страницы, вместо того, чтобы проверять переменную, которая была назначена значение главной страницы. Это, казалось, было трюком для проверки фильтров для любых страниц, на которых не было основной страницы (нуль или «[Нет]»)

+0

Я бы также избегал полагаться на подпроцессы js-преобразований, такие как сравнение экземпляра MasterSpread с объектом String. Это то, что происходит, когда вы делаете ... страницы [i] .appliedMaster! == «H-РЕКЛАМА» ... Таким образом, вы можете либо захотеть сделать страницы [i] .appliedMaster.name! == «H-РЕКЛАМА» или страницы [i ] .appliedMaster! == doc.masterSpreads.item («H-РЕКЛАМА»). Но первое, вероятно, безопаснее – Loic

Смежные вопросы