[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Objekte löschen anhand einer Farbe

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

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 245

31. Mai 2019, 11:23
Beitrag # 1 von 57
Bewertung:
(8090 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebes Forum,

ich bitte euch wieder mal um eure Mithilfe.

Mein Ziel ist:
Ich habe ein Dokument mit einer Doppelseite oder Einzelseite (das kann von Dokument zu Dokument variieren) und mehreren Ebenen. In diesem Dokument sollen alle Elemente (Polygone) die mit 100 % Yellow gefüllt sind gelöscht werden.

Nur ist mir nicht klar wie ich diese Elemente auswählen könnte. Das Gelb ist zwar in den Farbfeldern definiert, hat aber keinen "richtigen" Namen sondern nur die Farbwerte als Namen.



Habt ihr eine Idee?

Vielen Dank.
LG faxinger
X

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2521

31. Mai 2019, 12:35
Beitrag # 2 von 57
Beitrag ID: #570467
Bewertung:
(8067 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Zitat Nur ist mir nicht klar wie ich diese Elemente auswählen könnte. Das Gelb ist zwar in den Farbfeldern definiert, hat aber keinen "richtigen" Namen sondern nur die Farbwerte als Namen.

Das was Du siehst, ist der Name, also wo genau ist Dein Problem?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570465]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 245

31. Mai 2019, 13:38
Beitrag # 3 von 57
Beitrag ID: #570468
Bewertung:
(8052 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Werner,

ich habe mich geirrt, ich muss nur alle Polygone auswählen und löschen unabhängig von der Farbe.

Was ich noch wissen müsste ist wie ich an alle Polygone rankomme.
Also alle Polygone auf allen Seiten und allen Ebenen.
Ich habe zwar schon etwas Code aber der funktioniert schon von der Auswahl her nicht:
Code
var _dok= app.activeDocument; 

var _polys = _dok.polygons.everyItem().getElements();
alert (_polys.length);



if(!_polys.parentPage == null){_polys.remove()};


Bitte um kurze Antwort.

Danke
LG
faxinger


als Antwort auf: [#570467]
(Dieser Beitrag wurde von faxinger am 31. Mai 2019, 13:40 geändert)

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2521

31. Mai 2019, 14:12
Beitrag # 4 von 57
Beitrag ID: #570469
Bewertung:
(8040 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Bitte,

also dann vielleicht so:
Code
main(); 

function main() {
try{
var /*Array*/pIs = app.documents[0].allPageItems, /*Int*/l = pIs.length,
/*Array*/allPolygons = [];

for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
allPolygons.push(pIs[i]);
}
}
alert(allPolygons.length);
}
catch (error){
alert(error.message + "\nin Zeile: \n" + error.line);
}
// DESCRIPTION gets the inner constructor name of an object, e. g. pageItem -> TextFrame, Rectangle ...
// Dateiname: wpsInnerConstructorName.jsx
// [modified]
// created:Fri Aug 25 2017 15:31:53 GMT+0200
// for this Script
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: [email protected]
// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/wpsInnerConstructorName.jsx";
// [end of header]


// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/ErrorHandling/wpsHandleError.jsx";

/*String*/function wpsInnerConstructorName(/*Object*/o)
{
try
{
if (typeof(o) != "object")
{
var r = (typeof o ).toString().split("");
r[0] = r[0].toUpperCase();
return r.join("");
}
var constructorName = o.constructor.name;
if (!("getElements" in o))
return constructorName;
while (constructorName != o.getElements()[0].constructor.name)
{
if (!("getElements" in o))
break;
o = o.getElements()[0];
constructorName = o.constructor.name;
}
return constructorName;
}
catch (error)
{
if (error.number == 21)
return "Null";
// throw wpsHandleError(error, $.stack, "wpsInnerConstructorName");
// throw error;
}
}
}


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570468]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 245

31. Mai 2019, 14:20
Beitrag # 5 von 57
Beitrag ID: #570470
Bewertung:
(8031 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Werner,

aber leider funktioniert das Skript nicht. Es werden keine polygone gelöscht.

Die anzahl der Polygone wird ausgegeben.

LG
faxinger


als Antwort auf: [#570469]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2521

31. Mai 2019, 14:34
Beitrag # 6 von 57
Beitrag ID: #570471
Bewertung:
(8021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Darauf habe ich Dir geantwortet:

Zitat Was ich noch wissen müsste ist wie ich an alle Polygone rankomme.


löschen müsste so funktionieren:
Code
... 
for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
pIs[i].remove();
}
}
...


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570470]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5791

31. Mai 2019, 20:34
Beitrag # 7 von 57
Beitrag ID: #570472
Bewertung: ||
(7947 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Antwort auf: Was ich noch wissen müsste ist wie ich an alle Polygone rankomme.

Versuche es bitte mal damit:

Code
var allPolys = app.documents[0].polygons; 
var nPolys = allPolys.length;
for (var p=nPolys-1; p>-1; p--) {
allPolys[p].remove();
}

Auch mit diesem Einzeiler sollte es klappen:

Code
app.documents[0].polygons.everyItem().remove(); 

Voraussetzungen: Die Objekte sind nicht gruppiert. Weder Ebenen noch Objekte sind gesperrt.

Gruss, Hans


als Antwort auf: [#570470]
(Dieser Beitrag wurde von Hans Haesler am 1. Jun 2019, 08:03 geändert)

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 245

3. Jun 2019, 09:06
Beitrag # 8 von 57
Beitrag ID: #570489
Bewertung:
(6867 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans, hallo Werner,

vielen Dank für eure Antworten. Ich muss gestehen dass mir der Einzeiler bzw. das Kurzscript von Hans besser gefällt, da ich dabei auch navollziehen kann was genau passiert, was ich bei Werners Script leider nicht kann. Das ist für mich zu hoch. ;-)

Es ist zwar schön etwas Einblick in die Hohe Kunst des JS zu bekommen, aber Verständnis geht für mich vor.

Danke für eure Bemühungen.

@Hans: Die Variable runterzuzählen in der for-Schleife hat wahrscheinlich den Grund das Objekte gelöscht werden und somit die Anzahl der zu löschenenden Objekte bei jedem Durchgang kleiner wird, oder?

LG
faxinger


als Antwort auf: [#570472]

Objekte löschen anhand einer Farbe

Hans Haesler
  
Beiträge gesamt: 5791

3. Jun 2019, 09:39
Beitrag # 9 von 57
Beitrag ID: #570491
Bewertung: ||
(6858 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

bitte sehr. Und Deine Auslegung ist richtig.

Wenn die Schleife durch den Array vorwärts läuft ...

Code
var allPolys = app.documents[0].polygons; 
var nPolys = allPolys.length;
for (var p=0; p<nPolys; p++) {
allPolys[p].remove();
}

... kommt eine Fehlermeldung, wenn mehr als ein Polygon vorhanden ist.

Angenommen, im Dokument sind drei Polygons:
– Beim ersten Durchgang wird ein Polygon entfernt. Es verbleiben zwei.
– Beim zweiten Durchgang wird eines davon entfernt. Es verbleibt eines.
– Beim dritten Durchgang versucht das Script das dritte Polygon (von dreien) zu löschen.
Aber das gelingt nicht, weil nur noch eines vorhanden ist.

Bitte ausprobieren!

*****
Wenn die Schleife rückwärts läuft, muss als Startwert die Anzahl Objekte minus eins verwendet werden, weil das letzte Objekt mit "0" adressiert wird:
– Durchgang 1: lösche Objekt 2;
– Durchgang 2: lösche Objekt 1;
– Durchgang 3: lösche Objekt 0;

Also nochmals:
Code
var allPolys = app.documents[0].polygons; 
var nPolys = allPolys.length;
for (var p=nPolys-1; p>-1; p--) {
allPolys[p].remove();
}

Gruss, Hans


als Antwort auf: [#570489]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2521

3. Jun 2019, 10:58
Beitrag # 10 von 57
Beitrag ID: #570492
Bewertung:
(6840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

jetzt muss ich doch mal nachfragen:

Hans Beispiel zeigt wirklich alle Polygone einer Datei an?

Bei meiner Beispieldatei gilt:

Hans Methode: 3

Meine Methode: 40!

Und Du fragtest doch nach allen Polygonen, oder?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570489]

Objekte löschen anhand einer Farbe

faxinger
Beiträge gesamt: 245

3. Jun 2019, 17:20
Beitrag # 11 von 57
Beitrag ID: #570504
Bewertung:
(6789 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

du hast Recht, mit deiner Methode bekomme ich mehr Ergebnisse.

Aber ich bin zu blöd den "Löschcode" richtig einzusetzen.

Code
for (var i = 0; i < l; i++){  
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
pIs[i].remove();
}
}


Ersetzt dieser Code den Code ?:
Code
     for (var i = 0; i < l; i++){  
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
allPolygons.push(pIs[i]);
}
}


Falls ja hat das bei mir nicht geklappt.

Und wofür benötige ich den "InnerConstructionName"?


Danke
LG
faxinger


als Antwort auf: [#570492]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2521

3. Jun 2019, 17:35
Beitrag # 12 von 57
Beitrag ID: #570505
Bewertung:
(6780 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo faxinger,

Zitat du hast Recht, mit deiner Methode bekomme ich mehr Ergebnisse.

Ich weiß! :-)

Ich hätte jetzt gerne den Block zitiert, aber wieder einmal schafft das der Editor des Forums nicht.

Also Kurzfassung:

Ja, so müsste es eigentlich klappen:
Code
 allPolygons.push(pIs[i]);  wird durch pIs[i].remove(); 

ersetzt.

Was klappt denn nicht, wird ein Fehler geworfen?
Mit welchem Polygon klappt es nicht?

Zitat Und wofür benötige ich den "InnerConstructionName"?


In PageItem ist ein Sammelbegriff für Rectangles, Textframes, Polygons usw.

InnerConstructorName ermittelt den Typ des PageItems.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570504]
(Dieser Beitrag wurde von Gerald Singelmann am 7. Jun 2019, 12:19 geändert)

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2521

4. Jun 2019, 06:18
Beitrag # 13 von 57
Beitrag ID: #570509
Bewertung:
(6720 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin faxinger,

ich habe es gereade noch einmal selbst ausprobiert, bei mir klappt alles wie gewünacht:
Code
function main() { 
try{
var /*Array*/pIs = app.documents[0].allPageItems, /*Int*/l = pIs.length,
/*Array*/allPolygons = [];

for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
// allPolygons.push(pIs[i]); // entkommentieren zur Ermittlung der Anzahl, kommentieren zum Löschen
// pIs[i].remove(); // kommentieren zur Ermittlung der Anzahl, entkommentieren zum Löschen
}
}
alert(allPolygons.length);
}
catch (error){
alert(error.message + "\nin Zeile: \n" + error.line);
}
// DESCRIPTION gets the inner constructor name of an object, e. g. pageItem -> TextFrame, Rectangle ...
// Dateiname: wpsInnerConstructorName.jsx
// [modified]
// created:Fri Aug 25 2017 15:31:53 GMT+0200
// for this Script
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: [email protected]
// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/wpsInnerConstructorName.jsx";
// [end of header]


// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/ErrorHandling/wpsHandleError.jsx";

/*String*/function wpsInnerConstructorName(/*Object*/o){
...


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570505]

Objekte löschen anhand einer Farbe

WernerPerplies
Beiträge gesamt: 2521

4. Jun 2019, 08:09
Beitrag # 14 von 57
Beitrag ID: #570510
Bewertung:
(6698 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Und um auf das ursprüngliche Thema zurückzukommen:
Zitat Objekte löschen anhand einer Farbe

Code
main(); 

function main() {
try{
var /*Array*/pIs = app.documents[0].allPageItems, /*Int*/l = pIs.length,
/*Array*/allPolygons = [], /*Array*/allPolygonsWithDefinedFillColor = [],
/*Array*/allPolygonsWithDefinedStrokeColor = [], /*Array*/deletedItems = [];

for (var i = 0; i < l; i++){
if (wpsInnerConstructorName(pIs[i]) == "Polygon"){
// allPolygons.push(pIs[i]); // entkommentieren zur Ermittlung der Anzahl, kommentieren zum Löschen
// pIs[i].remove(); // kommentieren zur Ermittlung der Anzahl, entkommentieren zum Löschen
// allPolygonsWithDefinedFillColor.push(pIs[i].fillColor.name);
// allPolygonsWithDefinedStrokeColor.push(pIs[i].fillColor.name);
// Polygon mit einer bestimmten StrokeColor löschen
// detect collection of pIs[i].strokeColor:
if (pIs[i].strokeColor == app.activeDocument.colors.itemByName("Black"))
{
deletedItems.push(pIs[i].strokeColor.name);
pIs[i].remove();
}
}
}
// alert(allPolygons.length);
// alert(allPolygonsWithDefinedFillColor.join("\n"));
// alert(allPolygonsWithDefinedStrokeColor.join("\n"));
alert(deletedItems.join("\n"));
}
catch (error){
alert(error.message + "\nin Zeile: \n" + error.line);
}
// DESCRIPTION gets the inner constructor name of an object, e. g. pageItem -> TextFrame, Rectangle ...
// Dateiname: wpsInnerConstructorName.jsx
// [modified]
// created:Fri Aug 25 2017 15:31:53 GMT+0200
// for this Script
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: [email protected]
// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/wpsInnerConstructorName.jsx";
// [end of header]


// #include "C:/Users/WernerPerplies/Source/Workspaces/Singles/ErrorHandling/wpsHandleError.jsx";

/*String*/function wpsInnerConstructorName(/*Object*/o){
...


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler 15.06.2018, Version 1.75, neue Funktionen
Aktuelles
XING


als Antwort auf: [#570509]

Objekte löschen anhand einer Farbe

Uwe Laubender
Beiträge gesamt: 4774

4. Jun 2019, 10:35
Beitrag # 15 von 57
Beitrag ID: #570516
Bewertung:
(6679 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: … Und wofür benötige ich den "InnerConstructionName"? …


Hallo Faxinger,
wenn Du nach pageItems fahndest, bekommst Du pageItems zurück.
Die Oberklasse gewissermaßen von "Rectangles", "Ovals", "Polygons" etc.pp.

Willst Du nun wissen, was ein bestimmtes pageItems nun eigentlich ist, kannst Du das beispielsweise so machen:

Code
pageItem.getElements()[0] 


InDesign ist dann gezwungen genau nachzusehen, um was es sich handelt.
Also haben wir's mit einem Rechteck, Polygon etc.pp. zu tun.

Code
var doc = app.documents.add(); 
var objectOnPage = doc.rectangles.add({geometricBounds: [0,0,100,100]});

$.writeln( doc.pageItems[0] ); // [object PageItem]
$.writeln( doc.pageItems[0].getElements()[0] ); // [object Rectangle]

*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#570504]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
04.09.2020 - 05.03.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 04. Sept. 2020, 13.00 Uhr - Freitag, 05. März 2021, 12.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte. Mit dem Abschluss «Publisher Professional – Profil «Multimedia» verliehen durch die Digicomp Academy AG, bestätigen Sie Ihre Praxiserfahrungen und Qualifizierung in den genannten Themengebieten gegenüber Ihrem Arbeitgeber sowie Ihren Kunden.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/weiterbildung/software-anwendungs-trainings/adobe-trainings/publishing-lehrgaenge/lehrgang-publisher-professional-profil-multimedia

Veranstaltungen
02.10.2020 - 11.12.2020

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 02. Okt. 2020, 13.00 Uhr - Freitag, 11. Dez. 2020, 15.00 Uhr

Lehrgang

Steigen Sie in die Welt des Publishings ein und erlangen Sie die Zertifizierung von publishingNETWORK. Lernen Sie in diesem Lehrgang Druckmedien professionell zu erarbeiten, druckfertige PDFs zu erstellen und CI/CD-Vorgaben umzusetzen. Mit dem Abschluss «Publisher Basic» verliehen durch die Digicomp Academy AG, bestätigen Sie Ihre Praxiserfahrungen und Qualifizierung in den genannten Themengebieten gegenüber Ihrem Arbeitgeber sowie Ihren Kunden.

Preis: CHF 6'300.-
Dauer: 18 Tage (ca. 126 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt.

Nein

Organisator: Digicomp Academy AG

Kontaktinformation: Isil Günalp, E-Mailisil.guenalp AT digicomp DOT ch

https://www.digicomp.ch/weiterbildung/software-anwendungs-trainings/adobe-trainings/publishing-lehrgaenge/lehrgang-publisher-basic

Neuste Foreneinträge


Aufzählung mit hängendem Einzug in QX20?

wie langen Text auf viele Seiten einfügen - erledigt

Colormanagement bei Ausgabe von platzierten und profilierten cmyk-PDFs in 2020

Indesign Textrahmen mit frei definiertem Rahmen, Abstand zum Rahmen und vertikalem Keil erstellen

Pfad aus Zwischenablage für neues Bild ( rahmen )

Dropdown Farbmenu

Ja ich finde Adobe Anwendungen spitze, aber ...

Indesign Fußnoten/Endnoten bei Buchfunktion

Problem mit der Verknüpfung von InDesign mit Excel

Automatische Farbmengenberechnung
medienjobs