hilfdirselbst.ch
Facebook Twitter gamper-media
mgrams S
Beiträge: 28
30. Okt 2013, 14:42
Beitrag #1 von 6
Bewertung:
(2324 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Absätze mit einer Fläche hinterlegen


Hallo zusammen,

ich arbeite auf Mac OS X 10.6.8 mit Adobe inDesign CS5.

Hier im Forum bin ich auf das Script "para filled by rules - all.jsx" gestossen, welches auch seinen Dienst tut. Allerdings ist die Voraussetzung für die Ausführung, dass der Cursor in einem der Absätze sein muss, für die das Script laufen soll. Da das Script automatisch am Ende eines Workflows ausgeführt werden soll, hätte ich gerne eine andere Lösung. Und zwar so, dass im Script zwei (oder mehr) Absatzformate definiert werden, für die dann die Hinterlegung ausgeführt wird. Leider ist mir das bisher nicht gelungen. Wäre schön, wenn jemand eine Idee hätte, wie man das einbauen kann.

Code
if (app.documents.length != 0){ 
if (app.selection.length == 1){
switch (app.selection[0].constructor.name){
case "Text":
case "InsertionPoint":
case "Character":
case "Word":
case "Line":
case "TextStyleRange":
case "Paragraph":
main();
break;
default:
alert("Es ist kein Text markiert.");
break;
}
}
else{
alert("Es ist nichts markiert.");
}
}
else{
alert("Es ist kein Dokument offen.");
}

function main() {
var findTheseNames = new Array();
var findThese = new Array();

var myPars = app.selection[0].paragraphs;
for (var n=0; n < myPars.length; n++) {
var aParStyle = myPars[n].appliedParagraphStyle;
if (!isInArray(aParStyle.name, findTheseNames)) {
findTheseNames.push(aParStyle.name);
findThese.push(aParStyle);
}
}

var aDoc = app.activeDocument;
for (n = 0; n < findThese.length; n++) {
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.appliedParagraphStyle = findThese[n];
var foundTexts = aDoc.findText(true);
var a = foundTexts [0];
for (m = 0; m < foundTexts.length; m++) {
for (var o = 0; o < foundTexts[m].paragraphs.length; o++) {
paintPara(foundTexts[m].paragraphs[o]);
}
}
}
}

function isInArray(myItem, myArray) {
for (var n = 0; n < myArray.length; n++) {
if (myItem == myArray[n]) {return true}
}
return false;
}
function paintPara( aPara) {
app.select(aPara);
var aStory = aPara.parentStory;
var fstIndex = aPara.characters[0].index;
var lstIndex = aPara.lines[-1].characters[0].index;
var nLines = aPara.lines.length;

var oldUnits = app.activeDocument.viewPreferences.verticalMeasurementUnits;
app.activeDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.POINTS;

var aStyle = aPara.appliedParagraphStyle;
with (aStyle) {
var rao = ruleAboveOffset;
var ralw = ruleAboveLineWeight;
var rbo = ruleBelowOffset;
var rblw = ruleBelowLineWeight;
if (leading == Leading.AUTO) {
var ZA = autoLeading * pointSize/100;
} else {
var ZA = leading;
}
}
if (nLines > 2) {
var fli = aPara.firstLineIndent;
if ( aStory.insertionPoints[fstIndex].horizontalOffset - fli != aStory.insertionPoints[lstIndex].horizontalOffset) {
try {
for (var n=1; aPara.lines[n].insertionPoints[0].horizontalOffset == aPara.lines[n+1].insertionPoints[0].horizontalOffset; n++) {}
var nLinesLeft = n;
var nLinesRight = nLines - n -2;
} catch (e) {
// Das kann eigentlich nur schiefgehen, wenn links nur eine Zeile ist.
var nLinesLeft = 0;
var nLinesRight = nLines - 2;
}
} else {
var nLinesLeft = 0;
var nLinesRight = nLines - 2;
}
with (aPara) {
ruleBelowLineWeight = rblw + (nLinesRight * ZA);
ruleBelowOffset = rbo - (nLinesRight * ZA);
ruleAboveLineWeight = ralw + (nLinesLeft * ZA);
ruleAboveOffset = rao - (nLinesLeft * ZA);
}
app.activeDocument.viewPreferences.verticalMeasurementUnits = oldUnits;
} else {
with (aPara) {
ruleBelowLineWeight = rblw;
ruleBelowOffset = rbo;
ruleAboveLineWeight = ralw;
ruleAboveOffset = rao;
}
}
}

function getParaByIx( ix, aStory ) {
try {
for (var n = 0; aStory.paragraphs[n].insertionPoints[0].index <= ix; n++) {
var test = aStory.paragraphs[n].insertionPoints[0].index ;
var test = aStory.paragraphs[n+1].insertionPoints[0].index ;
}
return n-1;
} catch (e) {
return -1;
}
}

Viele Grüße,

Michael Grams
mg
(Dieser Beitrag wurde von Martin Fischer am 30. Okt 2013, 15:08 geändert)
Top
 
X
Martin Fischer  M  p
Beiträge: 11838
30. Okt 2013, 15:06
Beitrag #2 von 6
Beitrag ID: #519129
Bewertung:
(2309 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Absätze mit einer Fläche hinterlegen


Hallo Michael,

kennst Du das Plugin ParagraphBorder von dtp utils?

Kostet ein paar (wenige) Euros.
Macht aber das, was Du brauchst, flexibel im Absatzformat und noch einiges mehr.

Viele Grüße
Martin
als Antwort auf: [#519127] Top
 
mgrams S
Beiträge: 28
30. Okt 2013, 16:06
Beitrag #3 von 6
Beitrag ID: #519133
Bewertung:
(2267 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Absätze mit einer Fläche hinterlegen


Hallo Martin,

danke für die prompte Antwort.

Das Plugin ist sicher sehr hilfreich, es ist auch kein Problem, dass es etwas kostet, darum geht es nicht. Es ist nur so, dass wir Dokumente automatisch mit XML-Dateien aufbauen lassen. Über diese Dokumente läuft ein Script zur Bereinigung, aufbauend auf FindChangeByList. In einem zweiten Step wollte ich das Script mit dem Hintergrund laufen lassen.

Es kann dabei eine Liste von Javascripten abgearbeitet werden, der Zugriff auf ein Plugin ist nicht möglich.

Wenn eine Anpassung des vorhandenen Scripts nicht ohne größeren Aufwand möglich ist, werde ich vorübergehend auf eine Übergangslösung zurückgreifen und die Dateien manuell bereinigen. Vielleicht fällt mir noch ein anderer Ansatz ein.

Aber trotzdem vielen Dank für den Tipp, vielleicht kann ich das Plugin an anderer Stelle nutzen, sieht auf jeden Fall interessant aus.

Viele Grüße,

Michael Grams
mg
als Antwort auf: [#519129] Top
 
Martin Fischer  M  p
Beiträge: 11838
30. Okt 2013, 16:34
Beitrag #4 von 6
Beitrag ID: #519135
Bewertung:
(2252 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Absätze mit einer Fläche hinterlegen


Antwort auf: Es kann dabei eine Liste von Javascripten abgearbeitet werden, der Zugriff auf ein Plugin ist nicht möglich.


M.E. ist ein Zugriff auf das Plugin nicht zwingend nötig.
Die Absatzformate, in welchen die Unterlegung durch das Plugin vorbereitet ist, könnten z.B. im aktiven Dokument (in einer AF-Gruppe) oder in einem Template bereitgehalten werden.

Ein Skript könnte unter bestimmten ermittelten Bedingungen für die Zuweisung dieser vorbereiteten Absatzformate sorgen.

Viele Grüße
Martin
als Antwort auf: [#519133] Top
 
mgrams S
Beiträge: 28
30. Okt 2013, 16:53
Beitrag #5 von 6
Beitrag ID: #519137
Bewertung:
(2232 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Absätze mit einer Fläche hinterlegen


Hallo Martin,

das Stichwort war Template, alle Dokumente werden aus einer Template-Datei aufgebaut, damit können die Hintergrund-Optionen in den Formaten hinterlegt werden, ein separater Zugriff ist nicht mehr nötig.

Manchmal verrennt man sich dermaßen, dass man einen Denkansatz von außerhalb braucht, vielen Dank dafür.

Michael Grams
mg
als Antwort auf: [#519135] Top
 
mgrams S
Beiträge: 28
31. Okt 2013, 15:45
Beitrag #6 von 6
Beitrag ID: #519178
Bewertung:
(2058 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Absätze mit einer Fläche hinterlegen


Hallo Martin,

das Plugin war genau die richtige Lösung.

Zu FindChangeByList hätte ich noch eine Frage. Das Script läuft ja durch Doppelclick automatisch für das gesamte Dokument. Befindet sich der Cursor in einem Textrahmen oder ist ein Textrahmen aktiv erscheint ein Dialog, der die Auswahl "Selection", "Selected Story" und "Document" bietet.

Für eine automatische Anwendung wäre es mir aber lieber, das Script würde ungeachtet einer Auswahl immer ohne Dialog für das gesamte Dokument laufen.
Ich habe schon einiges auskommentiert, bin aber noch nicht zum gewünschten Ergebnis gekommen. Ist das überhaupt möglich?

Vielel Grüße,

Michael Grams
mg
als Antwort auf: [#519137] Top
 
X