#target indesign // // PageNamesToStoryALL.jsx // Version 1.3 // // created by: maqui | 10:18 28.02.2013 // modified by: maqui | 16:59 28.02.2013 (Löschen der Bedingungstexte ohne Einblenden --> Formatierung bleibt 1:1 erhalten) // modified by: maqui | 16:40 16.06.2014 Alle Textabschnitte erhalten die Seitenzahl-Infos // modified by: maqui | 11:00 21.05.2015 Debug (bedingten Text "PageStart" und "PageEnd" löschen, auch wenn er sichtbar ist) // modified by: gimsieke | 2015-06-07 Add 'CellPage_XY' to table cells // // Trägt in jedem Textrahmen (bei jedem Seitenwechsel) den Seitenbeginn bzw. das Seitenende als bedingten Text mit der jeweiligen Seitenzahl ein. // // var myPageStartTag = "PageStart"; var myPageEndTag = "PageEnd"; //var myStartSwatchName = "PageStart"; //var myEndSwatchName = "PageEnd"; var myCondSetOnName = "PageNumber_On"; var myCondSetOffName = "PageNumber_Off"; main(); // ==> function main(){ if(app.documents.length != 0){ var myDoc = app.activeDocument; var myPage; // Bedingungen definieren var myStartCond = newCondition(myDoc, myPageStartTag); myStartCond.indicatorMethod = ConditionIndicatorMethod.USE_HIGHLIGHT; myStartCond.indicatorColor = UIColors.GOLD; var myEndCond = newCondition(myDoc, myPageEndTag); // ==> myEndCond.indicatorMethod = ConditionIndicatorMethod.USE_HIGHLIGHT; myEndCond.indicatorColor = UIColors.LAVENDER; // Sets definieren if(checkConditionSet(myDoc, myCondSetOnName)) myDoc.conditionSets.item(myCondSetOnName).remove(); if(checkConditionSet(myDoc, myCondSetOffName)) myDoc.conditionSets.item(myCondSetOffName).remove(); var myOnSettingArray = [[myStartCond, true], [myEndCond, true]]; var myOffSettingArray = [[myStartCond, false], [myEndCond, false]]; var myCondSetOn = myDoc.conditionSets.add({name:myCondSetOnName, setConditions:myOnSettingArray}); var myCondSetOff = myDoc.conditionSets.add({name:myCondSetOffName, setConditions:myOffSettingArray}); myDoc.conditionalTextPreferences.properties = {activeConditionSet:myCondSetOn}; myCondSetOn.redefine(); myDoc.conditionalTextPreferences.properties = {activeConditionSet:myCondSetOff}; myCondSetOff.redefine(); // Farben für bedingten Text (als Orientierungshilfe) /*if (checkSwatch(myDoc, myStartSwatchName) == false) myDoc.colors.add({name:myStartSwatchName, colorValue:[0,0,255], model:ColorModel.PROCESS, space:ColorSpace.RGB}); if (checkSwatch(myDoc, myEndSwatchName) == false) myDoc.colors.add({name:myEndSwatchName, colorValue:[255,0,0], model:ColorModel.PROCESS, space:ColorSpace.RGB}); var myStartSwatch = myDoc.swatches.itemByName(myStartSwatchName); var myEndSwatch = myDoc.swatches.itemByName(myEndSwatchName);*/ var myStartCounter = 0; var myEndCounter = 0; for (var i = 0; i < myDoc.stories.length; i++) { var myStory = myDoc.stories[i]; var myMasterSpreadFlag = true; for (var j = 0; j < myStory.textContainers.length; j++) { var myTestFrame = myStory.textContainers[j]; // Wenn ein Textrahmen nicht auf der Montagefläche ... if(myTestFrame.hasOwnProperty("parentPage") && myTestFrame.parentPage != null) { // ... überprüfen, ob auf Musterseite if(myTestFrame.parentPage.parent.constructor.name != "MasterSpread" && myStory.textContainers.length > 0) { myMasterSpreadFlag = false; break; } } } // Wenn Textabschnitt sich nicht auf einer Musterseite befindet, ... if(!myMasterSpreadFlag && myStory.textContainers.length > 0) { // Alle Textrahmen vom Textabschnitt durchlaufen ... var myFrame = myStory.textContainers[myStory.textContainers.length - 1]; var myOldPage = false; // wenn nicht als "false" definiert, ist myOldPage letzter "Page"-Wert??????????????????????? var myOldFirstIP = false; while (myFrame != null) { var myPage = myFrame.parentPage; // Wenn Textabschnitt sich nicht auf Montagefläche ... if(myPage != null && myFrame.constructor.name == "TextFrame" && myFrame.insertionPoints.length > 0) { // PageEnd // Ist Rahmen auf anderer Seite? ... Wenn ja, dann PageEnd-Tag setzen if(myPage != myOldPage) { var myLastContent = myPageEndTag + "_" + myPage.name; if(myOldFirstIP) { //var myLastIP = myOldFirstIP.parentStory.insertionPoints.previousItem(myOldFirstIP); var myLastIP = myOldFirstIP.parentStory.insertionPoints[myOldID - 1]; //var myLastID = myLastIP.parentStory.insertionPoints.itemByRange(0, myLastIP.index).insertionPoints.length; //alert(myOldID + "\n" + myLastID); } else { var myLastIP = myFrame.insertionPoints.lastItem(); //myFrame.select(); //app.activeWindow.zoomPercentage = app.activeWindow.zoomPercentage; //alert(myLastContent + " :: " + myOldPage.constructor.name); } myLastIP.contents = myLastContent; //myLastIP.fillColor = myEndSwatch; myLastIP.applyConditions(myEndCond, true); myEndCounter++; } // PageStart // Ist vorheriger Rahmen auf anderer Seite? ... Wenn ja, dann PageStart-Tag setzen if (checkPrevFrame(myFrame, myPage)) { var myFirstContent = myPageStartTag + "_" + myPage.name; var myFirstIP = myFrame.insertionPoints.firstItem(); var myOldFirstIP = myFirstIP; // IP merken, da er sich bei evtl. Umbruchveränderungen verschiebt var myOldID = myOldFirstIP.parentStory.insertionPoints.itemByRange(0, myOldFirstIP.index).insertionPoints.length; myFirstIP.contents = myFirstContent; //myFirstIP.fillColor = myStartSwatch; myFirstIP.applyConditions(myStartCond, true); myStartCounter++; } myOldPage = myPage; } var myFrame = myFrame.previousTextFrame; } } // Process all table cells in the story since they won't be included in the frame iteration: if(!myMasterSpreadFlag && myStory.tables.length > 0) { for (var t = 0; t < myStory.tables.length; t++) { for (var c = 0; c < myStory.tables[t].cells.length; c++) { var myCell = myStory.tables[t].cells[c]; var firstCellChar = myCell.characters[0]; if (firstCellChar != null) { var myFrame = firstCellChar.parentTextFrames[0]; if (myFrame != null) { var myPage = myFrame.parentPage; var myIP = myCell.insertionPoints.firstItem(); myIP.contents = "CellPage_" + myPage.name; //myIP.fillColor = myStartSwatch; myIP.applyConditions(myStartCond, true); } } } } } } myDoc.select(NothingEnum.NOTHING); //alert("FERTIG! ;-) \r\rVergebene Startseiten-Label: " + myStartCounter + "\rVergebene Endseiten-Label: " + myEndCounter); } else{ alert("FEHLER! \r\rEs ist kein Dokument geöffnet."); } } function checkPrevFrame(thisFrame, thisPage) { if(thisFrame.previousTextFrame != null) { var thisPrevFrame = thisFrame.previousTextFrame; // Wenn Rahmen auf Montagefläche, vorherigen überprüfen, u.s.w. while (thisPrevFrame.parentPage == null) { /* thisPrevFrame.select(); app.activeWindow.zoomPercentage = app.activeWindow.zoomPercentage; alert("Rahmen auf Montagefläche!"); */ if(thisPrevFrame.previousTextFrame != null) { var thisPrevFrame = thisPrevFrame.previousTextFrame; } else return true; } if (thisPrevFrame.parentPage != thisPage) return true; else return false; } else return true; } function newCondition(myDoc, myCondName) { if(checkCondition(myDoc, myCondName)) { var myCond = myDoc.conditions.item(myCondName) myCond.visible = false; // Text mit dieser Bedingung löschen ... try { var myHiddenText1 = myDoc.stories.everyItem().hiddenTexts.everyItem().texts.everyItem().getElements(); } catch(e) {} if(myHiddenText1 != null){ for (var i = myHiddenText1.length-1; i >= 0; i--) { // Prüfung: versteckter Text hat mindestens eine Bedingung zugewiesen if (myHiddenText1[i].appliedConditions.length > 0) { for (var x = myHiddenText1[i].appliedConditions.length-1; x >= 0; x--) { // Prüfung der dem versteckten zugewiesenen Bedingung if (myHiddenText1[i].appliedConditions[x].name == myCondName) { //alert(myHiddenText1[i].texts[0].contents); myHiddenText1[i].remove(); } } } } } // How do I treat story hiddentext and cell hiddentext in a single pass? I.e., how can // I merge the two lists? concat() did not work. try { var myHiddenText = myDoc.stories.everyItem().tables.everyItem().cells.everyItem().hiddenTexts.everyItem().texts.everyItem().getElements(); } catch(e) {} if(myHiddenText != null){ for (var i = myHiddenText.length-1; i >= 0; i--) { if (myHiddenText[i].appliedConditions.length > 0) { for (var x = myHiddenText[i].appliedConditions.length-1; x >= 0; x--) { if (myHiddenText[i].appliedConditions[x].name == myCondName) { myHiddenText[i].remove(); } } } } } } else{ var myCond = myDoc.conditions.add({name:myCondName, visible:false}); } return myCond; } function checkCondition(myDoc, myConditionName) { try { var myCond = myDoc.conditions.item(myConditionName); myCond.name; return true; } catch(e) { return false; } } function checkConditionSet(myDoc, myConditionSetName) { try { var myCondSet = myDoc.conditionSets.item(myConditionSetName); myCondSet.name; //alert(myConditionSetName + " gibt's schon!"); return true; } catch(e) { return false; } } function checkSwatch(myDoc, mySwatchName) { try { myTestSwatch = myDoc.swatches.itemByName(mySwatchName); myTestSwatch.name; return true; } catch(e) { return false; } }