[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

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

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

JuMayr
Beiträge gesamt: 96

30. Sep 2011, 17:14
Beitrag # 1 von 19
Bewertung:
(7091 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi zusammen,

gleich noch eine Frage im Zusammenhang mit der Bibliothek.

Per Script wird aus dem aktuellen Seitenaufbau ein neues Element in der Bibliothek erzeugt.

Code
lib.store(spread.pageItems.everyItem().getElements()); 


Der Name dieses Elements setzt sich aus bestimmten Bestandteilen der Seite zusammen und wird dynamisch ermittelt.

Da ich für ein weiteres Script eindeutige Namen benötige muss ich prüfen, ob es bereits ein Element mit dem aktuellen Namen gibt.
Wenn ja, dann wird hinten am Ende des Namens eine laufende Nummer hochgezählt.

Aktuell habe ich zwar eine funktionsfähige, aber sehr langsame Lösung da bereits 700 Elemente in der Bibliothek gespeichert sind:


Code
             
//Templatename ohne laufende Nummer am Ende
var Templatename = images+"i "+vertical+"v "+horizontal+"h "+square+"s";

// Prüfen, ob ein Template mit diesem Namen in der ProduktionsBibliothek schon exisitert.
// Wenn nein, dann wird die laufende Nr. 1 vergeben
// Wenn es schon Templates mit gleicher Aufteilung gibt, dann wird die höchste laufende Nummer ermittelt und mit +1 vergeben.

counter=0;
var Templatename_full = Templatename;

do
{
counter+=1
Templatename_full = Templatename+" "+counter
var Templatename_vorhanden = lib_prod.assets.itemByName(Templatename_full).isValid
}
while (Templatename_vorhanden == true);


Ich schleife also jedesmal aufs neue durch die Bibliothek durch. Vielleicht hat jemand einen spontanen Einfall, wie man das besser/schneller lösen kann.

Viele Grüße
Jürgen
X

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

Martin Fischer
  
Beiträge gesamt: 12360

30. Sep 2011, 17:25
Beitrag # 2 von 19
Beitrag ID: #481406
Bewertung:
(7087 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Prüfe (ab CS4) mit isValid.
(returns true if the object specifier resolves to valid objects)

Code
var bibliotheksobjekt_vorhanden = lib.assets.itemByName('mein Name').isValid; 


Viele Grüße
Martin




als Antwort auf: [#481402]
(Dieser Beitrag wurde von Martin Fischer am 30. Sep 2011, 17:26 geändert)

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

JuMayr
Beiträge gesamt: 96

30. Sep 2011, 17:35
Beitrag # 3 von 19
Beitrag ID: #481411
Bewertung:
(7080 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Martin Fischer ] Prüfe (ab CS4) mit isValid.
(returns true if the object specifier resolves to valid objects)

Code
var bibliotheksobjekt_vorhanden = lib.assets.itemByName('mein Name').isValid; 



Ich sehe den Unterschied zu meiner Lösung gerade nicht.


als Antwort auf: [#481406]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

Martin Fischer
  
Beiträge gesamt: 12360

30. Sep 2011, 17:43
Beitrag # 4 von 19
Beitrag ID: #481414
Bewertung:
(7075 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vergiss meinen Hinweis.

War in Eile und mit der Antwort zu schnell.
Hatte dabei versäumt, Deinen Code aufmerksam zu lesen.

Jetzt bin ich weg ...

Viele Grüße
Martin




als Antwort auf: [#481411]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

JuMayr
Beiträge gesamt: 96

30. Sep 2011, 17:45
Beitrag # 5 von 19
Beitrag ID: #481416
Bewertung:
(7070 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
trotzdem Danke:)


als Antwort auf: [#481414]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

Martin Fischer
  
Beiträge gesamt: 12360

30. Sep 2011, 19:11
Beitrag # 6 von 19
Beitrag ID: #481424
Bewertung:
(7043 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Kurz zwischenrein als Idee:

Du könntest eine Liste mit Namen von Assets ermitteln (und ggf. zur späteren Verwendung extern oder in einem KeyLabel sichern) und mit einem regulären Ausdruck den angepeilten Namen mit all seinen möglicherweise vorhandenen Nummern ansprechen und darüber die höchste Nummer aussieben.

Käme auf einen Versuch an, ob das zu einer Beschleunigung führt.

Alternativ die Namen und ihre Nummern am Anfang des Skripts in einem assoziativen Array sichern und im Verlauf des Skripts darauf zurückgreifen.

Wichtig ist, dass Du von der Schleife, die permanent für die vielen Assets aufgerufen wird, wegkommst.

Viele Grüße
Martin




als Antwort auf: [#481416]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

JuMayr
Beiträge gesamt: 96

1. Okt 2011, 11:47
Beitrag # 7 von 19
Beitrag ID: #481455
Bewertung:
(6983 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Martin Fischer ] Kurz zwischenrein als Idee:

Du könntest eine Liste mit Namen von Assets ermitteln (und ggf. zur späteren Verwendung extern oder in einem KeyLabel sichern) und mit einem regulären Ausdruck den angepeilten Namen mit all seinen möglicherweise vorhandenen Nummern ansprechen und darüber die höchste Nummer aussieben.

Käme auf einen Versuch an, ob das zu einer Beschleunigung führt.

Alternativ die Namen und ihre Nummern am Anfang des Skripts in einem assoziativen Array sichern und im Verlauf des Skripts darauf zurückgreifen.

Wichtig ist, dass Du von der Schleife, die permanent für die vielen Assets aufgerufen wird, wegkommst.



Kann man bei der Abfrage der Bibliothek mit regulären Ausdrucken für den Namen des Assets arbeiten?

Also: Gibt mir alle Elemente der Bibliothek mit "01i 00v 00h 01s" anfangen und dahinter noch eine Zahl stehen haben?

Wenn ja, dann hätte ich mit einer Abfrage ein Array mit allen passenden Elementen und könnte über die Länge des Arrays die Anzahl und damit den höchten Wert ermitteln.


als Antwort auf: [#481424]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

Martin Fischer
  
Beiträge gesamt: 12360

1. Okt 2011, 16:52
Beitrag # 8 von 19
Beitrag ID: #481462
Bewertung:
(6960 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

eine Idee:

1. ermittle alle Namen der Bibliotheksobjekte und wandle diesen in einen String um;
2. definiere einen regulären Ausdruck, der die Zahlen hinter einem bestimmten String ermittelt (lookbehind);
3. wende diesen regulären Ausdruck über den match()-Befehl am String an – und schon sollten die Ziffern, die hinter dem Basisstring stecken, in einem Array zu greifen sein.

Etwa so:

Gegeben sind Bibliotheksobjekte mit folgenden Namen:
01i 00v 00h 01s 1
01i 00v 00h 01s 2
01i 00v 00h 01s 3
01i 00v 00h 01s 4
01i 00v 00h 01t 1
01i 00v 00h 01t 2
01i 00v 00h 01t 3
01i 00v 00h 01t 4


Code
const d = app.activeDocument; 
var lib = app.libraries.itemByName('Bibliothek.indl');
var asset_names = lib.assets.everyItem().name.join('\r'); // String mit allen Namen der Bibliotheksobjekte
var reg_exp = new RegExp('(?<=01i 00v 00h 01s )\\d+','g');
var numbers = asset_names.match(reg_exp);


Allerdings unterstützt JavaScript keine regexp lookbehind Syntax.

Deswegen musst Du Dir was konstruieren.
Nimm die Zeile
Code
var reg_exp = new RegExp('01i 00v 00h 01s \\d+','g'); 


Und lösche hinterher mit dem replace()-Befehl den Vorspan ('01i 00v 00h 01s ').

Muss leider schon wieder dringend weg, so dass ich das jetzt nicht weiter ausführen kann.

Viele Grüße
Martin




als Antwort auf: [#481455]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

WernerPerplies
Beiträge gesamt: 2542

3. Okt 2011, 18:20
Beitrag # 9 von 19
Beitrag ID: #481522
Bewertung:
(6879 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jürgen,

hier gibt es meinen Vorschlag, ist etwas umfangreicher geworden, aber schneller:
http://www.weepee.de/...ic.php?f=11&t=25

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: [#481402]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

JuMayr
Beiträge gesamt: 96

3. Okt 2011, 21:13
Beitrag # 10 von 19
Beitrag ID: #481523
Bewertung:
(6846 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ WernerPerplies ] Hallo Jürgen,

hier gibt es meinen Vorschlag, ist etwas umfangreicher geworden, aber schneller:
http://www.weepee.de/...ic.php?f=11&t=25


RESPEKT:)
Ich habe es noch nicht getestet, aber die Analyse war schonmal grandios.


als Antwort auf: [#481522]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

WernerPerplies
Beiträge gesamt: 2542

5. Okt 2011, 08:09
Beitrag # 11 von 19
Beitrag ID: #481642
Bewertung:
(6775 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jürgen,

jetzt würde mich natürlich auch das Ergebnis Deines Tests interessieren.

Wäre diese Lösung für Dich so einsetzbar?

Auch bei 2600 Einträgen in der Lib liegt die Suchzeit mit meiner Methode bei mir unter einer Millisekunde, während ich die Suche mit Deiner Methode nach einigen Minuten abgebrochen habe.

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: [#481523]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

JuMayr
Beiträge gesamt: 96

6. Okt 2011, 22:52
Beitrag # 12 von 19
Beitrag ID: #481802
Bewertung:
(6703 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich habe nun noch eine etwas andere Variante eingesetzt:

Code
    var lib = app.libraries.item("Templates.indl"); 
var prod_namen = lib.assets.everyItem().getElements();

Templatename = "04i 02v 01h 01s" //ohne lfd. Nummer

var item_name = Templatename;
var assets = new Array();

for (var n = 0; n < prod_namen.length; n++) {
if (prod_namen[n].name.search( item_name ) != -1) {
assets.push( prod_namen[n] );
}
}

var item_anzahl = assets.length;

counter=item_anzahl+1; //Dies ist meine laufende Nummer die ich anhängen muss.



als Antwort auf: [#481642]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

-hans-
Beiträge gesamt: 746

7. Okt 2011, 00:46
Beitrag # 13 von 19
Beitrag ID: #481806
Bewertung: ||
(6688 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

dann vllt. lieber match verwenden? So kannst Du die ganze Liste einfach in einen String umbimsen und mit RegEx durchforsten ... und musst nicht jedes ArrayObjekt einzeln abfragen.

Hab's nicht verglichen, aber vom Ablauf erscheint es mir schneller ...

In etwa so:
Code
var lib = app.libraries.item("contACt_bib.indl");  
var prod_namen = lib.assets.everyItem().getElements();
var assets = new Array();

for (var n = 0; n < prod_namen.length; n++) {

assets.push( prod_namen[n].name );
}

var Templatename = "3sp_hdl24"
var assets = assets.toString( );
var treffer = assets.match( Templatename + "([0-9]+),")
var Templatename = "3sp_hdl24" + (treffer.length + 1).toString()
alert(Templatename)


Lieben Gruß

Hans-Gerd Claßen
Lieben Gruß

Hans-Gerd Claßen


als Antwort auf: [#481802]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

WernerPerplies
Beiträge gesamt: 2542

7. Okt 2011, 08:25
Beitrag # 14 von 19
Beitrag ID: #481809
Bewertung:
(6653 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen


als Antwort auf: [#481802]

Bibliothek (library) - Prüfen, ob es ein bestimmtes Element schon gibt.

WernerPerplies
Beiträge gesamt: 2542

7. Okt 2011, 08:30
Beitrag # 15 von 19
Beitrag ID: #481810
Bewertung:
(6653 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans-Gerd,

Vergleich es mal ;-)

Ich denke, Dein Vorschlag muss langsamer sein:

1. reguläre Ausdrücke sind langsamer als der direkte Stringvergleich
2. Stringoperationen sind langsam, speziell Stringadditionen (concats)

Aber ich lasse mich gerne eines Besseren belehren.

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: [#481806]
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
01.12.2020 - 03.12.2020

ortsunabhängig
Dienstag, 01. Dez. 2020, 10.00 Uhr - Donnerstag, 03. Dez. 2020, 11.30 Uhr

Online Workshop-Reihe

Sie wollen barrierefreie PDF-Dokumente mit möglichst wenig Aufwand erstellen? Mit ein wenig Grundlagenwissen können Sie dies aus InDesign mit axaio MadeToTag erreichen – ohne manuelle Nacharbeit im PDF! In diesem 3-teiligen, interaktiven Webinar, das wir vom 1. – 3. Dezember 2020 gemeinsam mit unserem Partner und InDesign-Experten Klaas Posselt von einmanncombo organisieren, lernen die Teilnehmenden, wie sie zielführend beim Erstellen von barrierefreien PDF-Dokumenten aus Adobe InDesign vorgehen. Dafür wird zu Beginn vermittelt, was ein barrierefreies PDF ist, und welche Anforderungen an solche Dokumente bestehen. Mit diesem Wissen werden, anhand von Best-Practice-Beispielen, Strategien zum effizienten Erstellen von PDF/UA-konformen Dokumenten und Formularen mit Adobe InDesign und axaio MadeToTag gezeigt. Außerdem werden Lösungen für klassische Probleme vermittelt. Die Teilnehmenden erhalten im Vorfeld eine Liste der notwendigen Software, wie auch vorbereitete Workshop-Daten, an denen alle im Webinar unter Anleitung arbeiten. Während des Webinars haben die Teilnehmenden die Möglichkeit, Fragen zu stellen. Inhalte der einzelnen Webinare: Die Webinar-Serie besteht aus vier Teilen (Inhalte folgend). Diese bauen aufeinander auf, können aber, mit den entsprechenden Vorkenntnissen, auch einzeln besucht werden. Webinar 1 – Grundlagen (1. Dezember 2020, 10.00 - 11.30 Uhr) Fundiertes Grundlagenwissen über barrierefreie PDF-Dokumente bildet die Basis einer erfolgreichen Umsetzung in InDesign, um die dafür notwenigen Werkzeuge richtig einsetzen zu können. â–ª Warum barrierefreies PDF? â–ª Gesetzliche Grundlagen und Richtlinien â–ª Anforderungen an barrierefreie PDF-Dokumente â–ª Basiswissen zur Umsetzung in InDesign â–ª Einordnung axaio MadeToTag Webinar 2 – Einstieg MadeToTag (2. Dezember 2020, 10.00 - 11.30 Uhr) Anhand eines InDesign-Beispieldokumentes wird eine Publikation Schritt für Schritt mit MadeToTag barrierefrei gemacht. â–ª Warum MadeToTag nutzen? â–ª Nützliche Funktionen/Mehrwert gegenüber InDesign â–ª Arbeitsschritte in der Übersicht â–ª Gemeinsam ein Dokument barrierefrei machen, Schritt für Schritt â–ª Ausgabe als barrierefreies PDF/UA Webinar 3 – Spezielle Aufgaben mit MadeToTag meistern (3. Dezember 2020, 10.00 - 11.30 Uhr) Bestimmte Inhalte, wie unpassend erstellte Inhalte (z.B. manuelle Trennungen), komplexe Tabellen oder Formulare, können in einer barrierefreien Umsetzung sehr störend oder gar kniffelig sein. MadeToTag kann hier Hilfestellung leisten. â–ª Probleme finden und beheben â–ª Komplexere und richtig komplexe Tabellen â–ª Formulare â–ª Schneller Arbeiten mit Shortcuts â–ª Vorlagen aufbauen Ziele der Webinar-Serie: â–ª Grundlagen barrierefreier Dokumente kennen â–ª Barrierefreie Dokumente in InDesign mit MadeToTag vorbereiten und ausgeben Teilnahmegebühr: Die Teilnahmegebühr für alle drei Webinare beträgt € 89,- (zzgl. MwSt.) Wir freuen uns auf Ihre Teilnahme! Das axaio-Team

Ja

Organisator: axaio software

Kontaktinformation: Karina Zander, E-Mailk.zander AT axaio DOT com

https://en.xing-events.com/OEBIDIR.html

Erstellung barrierfreier PDF-Dokumente mit InDesign & MadeToTag
Veranstaltungen
07.12.2020 - 08.12.2020

Digicomp Academy AG, Küchengasse 9, 4051 Basel
Montag, 07. Dez. 2020, 08.30 Uhr - Dienstag, 08. Dez. 2020, 17.00 Uhr

Kurs

Dieser Basic-Kurs ist der perfekte Einstieg in die Welt von InDesign, dem vielseitigen Layout-Programm. Sie lernen, wie InDesign aufgebaut ist, wie saubere Dokumente erstellt werden und wie man korrekt mit gelieferten InDesign-Projekten umgeht.

CHF 1'400.-
Dauer: 2 Tage

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/desktop-publishing/adobe-indesign-cc/kurs-indesign-cc-basic

Neuste Foreneinträge


Probleme mit dem Strukturbaum Acrobat Pro DC (barrierefrei)

Initial mit unterschiedlichem rechten Rand

Nach Installation des RAM bleibt das Display über mehrere Minuten dunkel. Was tun?

Indesign CC2021 verliert Speicherpfad von Dateien

Gibt es Audio-USB-Adapter mit STEREO-Mikrofoneingang?

Index-Probleme

Probleme beim Einlaoggen auf Quark-Seite

Musterseite in anderes Layout ziehen

Wo kann ich iColorDisplay 3.8.5.3 für OSX downloaden?

Großformat Druckdaten anlegen
medienjobs