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:
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!
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!