Текстовые фреймы исчезают после применения ParagraphStyle

У меня, мягко говоря, не так много опыта работы с Indesign, но меня попросили выяснить, возможно ли (используя сервер сценариев indesign) создать новый документ, применить главную разворотную страницу, вставить несколько абзацев и применить какой-либо абзац. стили.

Решение, которое я придумал, это

// define template
var indesignTemplate = new File("/e/mytemplate.indt");

// open the template
var doc = app.open(indesignTemplate);

// get master page
var masterPage = doc.masterSpreads.item("A-Master");

// get first page
var page = doc.pages.item(0);

// apply master page to our first page
page.appliedMaster = masterPage

// get paragraph style
var paragraphStyle = doc.paragraphStyles.item("_2.ondertitel_bladzijde");

for (var i = 0; i < masterPage.textFrames.length; i++) {
     var textframe = masterPage.textFrames.item(i);
    if (textframe.label === "flow") {
        for (var x = 0; x < 5; x++) {
            // insert another new paragraph
            textframe.parentStory.insertionPoints.item(-1).contents = "Lorem ipsum dolor... \r\r";
        }

       for (var x = 0; x < textframe.paragraphs.length; x++) {
         textframe.paragraphs.item(0).applyParagraphStyle(paragraphStyle);
       }

     }
}

//Save the document (fill in a valid file path).
doc.save(new File("/c/mybook.indd"));

// Save the document as an PDF
doc.exportFile(ExportFormat.pdfType, new File("/c/mybook.pdf"));

// close the document.
app.documents.item(0).close();

Это работает и может видеть мой текст, когда я комментирую код applyParagraphStyle.

С того момента, как я пытаюсь применить стиль абзаца, текст скрывается. Когда я затем открываю сохраненный файл indd в Indesign и щелкаю команду + Shift в пустом текстовом фрейме, появляется текст, и я также вижу появление дополнительного слоя.

Я также пытался применить CharacterStyles более или менее таким же образом, но это не вызывает никаких проблем.

Я предполагаю, что проблема заключается в том, что я могу подходить к этому неправильно?


person Glenn De Backer    schedule 10.07.2017    source источник
comment
Попробуйте добавить textframe.recompose() в свой цикл   -  person Nicolai Kant    schedule 10.07.2017
comment
К сожалению, такое же поведение :(   -  person Glenn De Backer    schedule 10.07.2017


Ответы (2)


В конце концов я придумал следующее, которое решило мою проблему. Я не знаю, то ли я немного переусердствую, то ли это соответствует правилам искусства.

var indesignTemplate = new File("/e/boek_nl.indt");  

// open the template  
var doc = app.open(indesignTemplate);  

// get master page  
var masterPage = doc.masterSpreads.item("A-Master");  

// get first page  
var page = doc.pages.item(0);  

// apply master page to our first page  
page.appliedMaster = masterPage  

// get paragraph style  
var paragraphStyle = doc.paragraphStyles.item("_2.ondertitel_bladzijde");  

// get text frame  
function getTextFrame(pageObj, frameName) {  
   var allItems = pageObj.appliedMaster.pageItems.everyItem().getElements();  

for(var j=0;j<allItems.length;j++)  
{  
    if(allItems[j].label === frameName) {  
        return allItems[j].override(pageObj);  
    }  
}  

var textFrame = getTextFrame(page, "flow")  

// insert a paragraph 5 times  
for (var x = 0; x < 5; x++) {  
   textFrame.parentStory.insertionPoints.item(-1).contents = "text \r\r";  
}  

// apply paragraph style  
textFrame.paragraphs.item(0).applyParagraphStyle(paragraphStyle);  

//Save the document (fill in a valid file path).  
doc.save(new File("/c/boek_nl.indd"));  

// Save the document as an PDF  
doc.exportFile(ExportFormat.pdfType, new File("/c/boek_nl.pdf"));  

// close the document.  
app.documents.item(0).close();  
person Glenn De Backer    schedule 13.07.2017

Вы применяете мастер-расклад, а затем изменяете его. Я думаю, что лучшим подходом было бы переопределить текстовые фреймы на странице. Попробуй это:

// define template
var indesignTemplate = new File("/e/mytemplate.indt");

// open the template
var doc = app.open(indesignTemplate);

// get master page
var masterPage = doc.masterSpreads.item("A-Master");

// get first page
var page = doc.pages.item(0);

// apply master page to our first page
page.appliedMaster = masterPage;  // you are missing closing semicolon here

// get paragraph style
var paragraphStyle = doc.paragraphStyles.item("_2.ondertitel_bladzijde");

for (var i = 0; i < page.textFrames.length; i++) {
     var textframe = page.textFrames.item(i);
    if (textframe.label === "flow") {
        textframe.override(page);
        for (var x = 0; x < 5; x++) {
            // insert another new paragraph
            textframe.parentStory.insertionPoints.item(-1).contents = "Lorem ipsum dolor... \r\r";
        }

       for (var x = 0; x < textframe.paragraphs.length; x++) {
         textframe.paragraphs.item(0).applyParagraphStyle(paragraphStyle);
       }

     }
}

//Save the document (fill in a valid file path).
doc.save(new File("/c/mybook.indd"));

// Save the document as an PDF

Если по какой-либо причине вам необходимо изменить основной разворот, попробуйте сначала изменить его, а затем применить к странице.

person Nicolai Kant    schedule 10.07.2017
comment
В этом случае я также получаю пустой документ, к сожалению - person Glenn De Backer; 11.07.2017
comment
Мой тестовый файл на основе вашего поста работает нормально, значит есть что-то еще - person Nicolai Kant; 11.07.2017