[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt 2 immer wiederkehrende Objekte im gesamten Dokument löschen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

2 immer wiederkehrende Objekte im gesamten Dokument löschen

Kai Rübsamen
Beiträge gesamt: 4684

17. Okt 2014, 10:42
Beitrag # 31 von 38
Beitrag ID: #533134
Bewertung:
(5153 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@Joachim: Wahrscheinlich an den Rundungen. Schick mir mal ein Dokument. Bin jetzt mal 1-2 Std. weg uns schau es mir dann an.
@Jo: Ähm, ich weis das ;-) Wo sollte ich das hier gebrauchen? Beim Runden? > War in meinem Test nicht notwendig.


als Antwort auf: [#533132]
(Dieser Beitrag wurde von Kai Rübsamen am 17. Okt 2014, 10:44 geändert)
X

2 immer wiederkehrende Objekte im gesamten Dokument löschen

mx
Beiträge gesamt: 161

17. Okt 2014, 13:15
Beitrag # 32 von 38
Beitrag ID: #533153
Bewertung:
(5112 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

da klappt noch mehr nicht:

Code
app.findObjectPreferences.strokeColor = app.swatches[0].name; 


funktioniert, aber

Code
app.findObjectPreferences.strokeColor = app.swatches[0]; 


funktioniert NICHT und meldet:

Zitat Fehler: Ungültiger Wert für Einrichtung der Eigenschaft "strokeColor". Swatch, String or NothingEnum enumerator erwartet, aber Swatch erhalten.


Also wenn ein Swatch kein Swatch ist, was ist denn dann ein Swatch?!

und der Wert von

Code
app.findObjectPreferences.strokeColor.name 


passt NICHT zu dem, was nach

Code
app.findObjectPreferences.strokeColor = app.swatches[0].name 


drin stehen sollte ("None").



Als einzige brauchbare Variante sehe ich da nur die Abfragen vorab im Dialog zu speichern und dann nacheinander auszuführen:

Code
Document.prototype.RemoveLine = function(query){   
if(query == null)
return null;
app.changeObjectPreferences = NothingEnum.nothing;
app.findObjectPreferences = NothingEnum.nothing;
app.findChangeObjectOptions.properties = {includeFootnotes:false, includeMasterPages:true};
try{
app.loadFindChangeQuery(query, SearchModes.OBJECT_SEARCH);
}
catch (e){
app.changeObjectPreferences = NothingEnum.nothing;
app.findObjectPreferences = NothingEnum.nothing;
return e;
}
var searchResults = this.findObject();
app.changeObjectPreferences = NothingEnum.nothing;
app.findObjectPreferences = NothingEnum.nothing;
for(var i=0; searchResults.length > i; i++)
if(searchResults[i].constructor.name == "GraphicLine")
searchResults[i].remove();
}

app.activeDocument.RemoveLine("FindLine2");
app.activeDocument.RemoveLine("FindLine1");



Viele Grüße
Jo

@Kai:
Jeopardy-Modus: Nach was wolltest Du mich in #23 fragen, wenn die JavaScript-Konsole nicht die Antwort ist?


als Antwort auf: [#533062]

2 immer wiederkehrende Objekte im gesamten Dokument löschen

Kai Rübsamen
Beiträge gesamt: 4684

17. Okt 2014, 13:42
Beitrag # 33 von 38
Beitrag ID: #533154
Bewertung:
(5099 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@Jo: Ich wollte dich fragen, ob du deine Schreibweise in mein Skript übertragen kannst, also das Aufrufen der properties. Ich bin ja hier noch der Skriptanfänger und kann mit Sachen wie 'document.prototype' oder 'this' nix anfangen.


als Antwort auf: [#533153]

2 immer wiederkehrende Objekte im gesamten Dokument löschen

Hans Haesler
  
Beiträge gesamt: 5826

17. Okt 2014, 13:58
Beitrag # 34 von 38
Beitrag ID: #533156
Bewertung:
(5084 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jo,

wenn ich Deinen ersten Befehl ausführe und danach den Suchen/Ersetzen-Dialog aufrufe, dann steht dort in der Öffnung "Objektformat suchen":

Code
Kontur: 
Farbe: (Unbenannte Farbe)

Mit Klick auf das Papierkorb-Symbol den Eintrag löschen und mit Klick auf "Fertig" den Dialog schliessen.

Mit dem zweiten Befehl kommt keine Fehlermeldung. Der Dialog zeigt dasselbe Ergebnis.
Erneut den Eintrag löschen und im ersten Befehl die Null durch eine Eins ersetzen:

Code
app.findObjectPreferences.strokeColor = app.swatches[1].name; 

Wieder dasselbe Ergebnis. Aber beim Klick auf die Lupe, um die Suchattribute anzugeben ... ein Absturz von InDesign.
Weil die Aufgabe ja schon gelöst ist, mag ich nicht weiter im Dunkeln stochern.

Oder doch? :-) Wenn anstelle des Farbfelds des Programms eines des aktiven Dokuments eingesetzt wird ...

Code
app.findObjectPreferences.strokeColor = app.documents[0].swatches[0]; 

... wird die widersprüchliche Fehlermeldung gezeigt.

Gruss, Hans


als Antwort auf: [#533153]

2 immer wiederkehrende Objekte im gesamten Dokument löschen

Kai Rübsamen
Beiträge gesamt: 4684

17. Okt 2014, 14:15
Beitrag # 35 von 38
Beitrag ID: #533157
Bewertung:
(5073 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Joachim,

nachfolgende Zeilen sollten die graue und weiße Kontur löschen. Bitte mal testen und Rückmeldung.

Code
var weisseLinie = "Paper"; 
var graueLinie = "Hager 0-0-0-65";
var graueLinieKontur = 0.5;
var strichLaenge = 134;

var curDoc = app.activeDocument;
var allLines = curDoc.graphicLines;

for ( var i = allLines.length-1; i>-1; i-- ) {
var curLine = allLines[i];
if ( curLine.strokeColor.name == weisseLinie ) {
var vB = curLine.visibleBounds;
var width = Math.floor((( vB[3] - vB[1]) * 1000) + 0.5 ) / 1000;
if ( width == strichLaenge ) {
curLine.remove();
}
}
else if ( curLine.strokeColor.name == graueLinie && curLine.strokeWeight == graueLinieKontur ) {
curLine.remove();
}
}



als Antwort auf: [#533156]

2 immer wiederkehrende Objekte im gesamten Dokument löschen

mx
Beiträge gesamt: 161

17. Okt 2014, 14:15
Beitrag # 36 von 38
Beitrag ID: #533158
Bewertung:
(5072 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

mit meiner Schreibweise (object.prototype.method) erweitere ich nicht ein einzelnes Objekt um eine Methode, sondern die ganze "Klasse", wobei das stark verkürzt ist, weil das Konzept in JavaScript eben "prototype" ist und nicht Klasse, wie in anderen Programmiersprachen.

Die Funktionen, die so geschrieben sind, können dann an allen Document-Objekten aufgerufen werden und nicht nur an einem einzigen. Das ganze geht natürlich für alle anderen Objekte genauso, wenn Du z.B. eine Funktion brauchst, die immer wieder mit Page-Objekten arbeitet (z.B. gib mir zu dieser Seite die nächste Seite mit der gleichen Vorlage), dann erweitert das den Page-Prototyp um diese Funktion.
this bezieht sich dann immer auf das Objekt, mit dem dann live gearbeitet wird, wenn die Funktion ausgeführt wird.

Mehr dazu und noch mehr nützliches unter:
http://eloquentjavascript.net/...dition/chapter8.html

Viele Grüße
Jo


als Antwort auf: [#533154]

2 immer wiederkehrende Objekte im gesamten Dokument löschen

WernerPerplies
Beiträge gesamt: 2762

17. Okt 2014, 14:17
Beitrag # 37 von 38
Beitrag ID: #533159
Bewertung:
(5072 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Da gibt es meines Erachtens nach ein Unsauberkeit in InDesign, auf die ich schon an anderer Stelle hingewiesen habe:

Ein Zugriff über app.swatches liefert Objekte zurück, die als Swatches ausgewiesen werden, aber sich bei Nutzung nicht als Swatches erweisen.

Echte Swatches bekommt man m. E. nur über einen Zugriff über die Document.Swatches zurück.
Wenn man über die Indesign-Benutzeroberfläche zugreift werden dies Objekte wohl intern in Document-Swatches umgewandelt.

Bei einem Skript kann man diese Umwandlung durch ein dupclicate() erreichen.

Wenn man zum Beispiel die ID von app.gradients[0] ermittelt und das zugehörige Swatch über
app.swatches.itemByID(gradientID) ermittelt scheint man ein Swatch zu erhalten, das sich dann bei Zuweisung als Gradient erweist.

Ich hoffe, diese Erklärung war nicht zu abstrakt.


als Antwort auf: [#533156]

2 immer wiederkehrende Objekte im gesamten Dokument löschen

JoPo
Beiträge gesamt: 534

17. Okt 2014, 14:43
Beitrag # 38 von 38
Beitrag ID: #533162
Bewertung:
(5022 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

danke, es funktioniert prima.

Salü
Joachim


als Antwort auf: [#533157]
X