[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Methode duplicate() mit verschachtelten Elementen

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

Methode duplicate() mit verschachtelten Elementen

Uwe Laubender
Beiträge gesamt: 5319

1. Aug 2022, 18:00
Beitrag # 1 von 3
Bewertung:
(3211 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

dies hier nur als erweiterte Notiz ein Problem mit der Methode duplicate() betreffend.
Viele von uns Skriptern gingen davon aus, dass pageItem.duplicate() ohne Argumente immer ein Duplikat des Elements in der gleichen Position erstellt, wenn das Elterelement des Duplikats keiner besonderen Transformation unterzogen ist. Und wenn der parent des Elterelements der Druckbogen ist ( spread ).

Das ändert sich schlagartig, wenn das Elterelement in einer verschachtelten Struktur existiert und der Druckbogen nicht der erste im Dokument ist.

Kleines Beispiel:
Dokument mit zunächst einer Seite, kein Doppelseiten-Dokument ( facing-pages off ). Auf der Seite ein einfacher Textrahmen mit einer Tabelle, deren erste Zelle eine Grafikzelle mit einem Bild beherbergt.

Nun duplizieren wir diese Seite zwei, dreimal.

Anschließend lassen wir folgendes Skript laufen, das den Inhalt der Grafikzelle aller dieser Tabellen dupliziert:

Code
var doc = app.documents[0]; 
var textFramesArray = doc.pages.everyItem().textFrames.everyItem().getElements();

for( var n=0; n<textFramesArray.length; n++ )
{
textFramesArray[n].tables[0].cells[0].pageItems[0].duplicate();
};


Das Ergebnis zeigt, dass duplicate() mit Ausnahme des ersten Druckbogens das duplizierte Element nicht an die gleiche Position dupliziert. Hier gezeigt in drei Screenshots für mein dreiseitiges Testdokument:

https://www.dropbox.com/s/i149kwr8reyfqra/DuplicatedImageSelected-Spread-1.PNG?dl=0

https://www.dropbox.com/s/mroje82g8z4zidu/DuplicatedImageSelected-Spread-2.PNG?dl=0

https://www.dropbox.com/s/mroje82g8z4zidu/DuplicatedImageSelected-Spread-2.PNG?dl=0

Ihr könnt das Testdokument im Zustand vor der Skriptausführung von meiner Dropbox laden:
https://www.dropbox.com/s/zifmxnqfwpx098h/SampleTableWithGraphicCell-2022.indd?dl=1

Anhand der einzelnen Screenshots kann man gut sehen, dass das Duplikat immer weiter vom Original wegwandert.
Und zwar je weiter der Druckbogen vom ersten Druckbogen entfernt ist.

Um das Problem nun geradezubiegen fällt mir nur die Methode move() ein nachdem das Duplikat erstellt wurde, denn aucn folgender Code schafft keine Abhilfe, obwohl ich explizit das zweite Argument "by" benutze mit einem Array für x und y mit den jeweiligen Werten 0 . Da dürfte sich also gar nichts bewegen in Bezug auf's Original. Bei unserem Beispiel ist das gerade nicht der Fall, wenn das zu duplizierende Element nicht auf dem ersten Druckbogen des Dokuments liegt!

Code
var doc = app.documents[0]; 
var textFramesArray = doc.pages.everyItem().textFrames.everyItem().getElements();

for( var n=0; n<textFramesArray.length; n++ )
{
textFramesArray[n].tables[0].cells[0].pageItems[0].duplicate( undefined , [0,0] );
};


Wie setze ich move() ein?

Ich schnappe mir den Wert der Eigenschaft anchor eines bestimmten Pfadpunktes des zu duplizierenden Elements, der ja den [x,y]-Wert des Punktes widergibt. Mache das auch beim duplizierten Element und bewege mit dem zweiten Argument von move(), dem "by"-Argument das duplizierte Element um die Differenz der beiden x,y-Wertpaare zurück.

Wie gezeigt in diesem Beitrag, der der Anlass zu diesem hier war:

https://www.hilfdirselbst.ch/...i?post=584045#584045

Ergänzungen zum Thema sind gerne willkommen.
Danke!
X

Methode duplicate() mit verschachtelten Elementen

Uwe Laubender
Beiträge gesamt: 5319

1. Aug 2022, 18:33
Beitrag # 2 von 3
Beitrag ID: #584051
Bewertung:
(3196 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier noch mal die korrigierten Links zu den Screenshots:

https://www.dropbox.com/...ed-Spread-1.PNG?dl=0

https://www.dropbox.com/...ed-Spread-2.PNG?dl=0

https://www.dropbox.com/...ed-Spread-3.PNG?dl=0

Da war ich beim Posten zu schnell.

Auch als Link nun die Testdatei:

https://www.dropbox.com/...cCell-2022.indd?dl=1


als Antwort auf: [#584050]

Methode duplicate() mit verschachtelten Elementen

Uwe Laubender
Beiträge gesamt: 5319

2. Aug 2022, 10:15
Beitrag # 3 von 3
Beitrag ID: #584055
Bewertung:
(3103 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Was übrigens funktioniert mit meiner Testdatei ohne dass das Duplikat verschoben wird, ist das Arbeiten mit einer echten Auswahl über select(), das Kopieren über app.copy() und das Einfügen über app.pasteInPlace().

Code
var doc = app.documents[0]; 

var textFramesArray = doc.pages.everyItem().textFrames.everyItem().getElements();

for( var n=0; n<textFramesArray.length; n++ )
{
app.select( textFramesArray[n].tables[0].cells[0].pageItems[0] );
app.copy();
app.pasteInPlace();
app.select( null );
};



als Antwort auf: [#584050]