[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Textrahmen per Script verketten

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

Textrahmen per Script verketten

cwenet
Beiträge gesamt: 1136

15. Sep 2019, 14:49
Beitrag # 16 von 22
Beitrag ID: #571884
Bewertung:
(5432 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner, hallo Hans,

danke Euch beiden für die sonntagliche Hilfe.

Da es ein fremdes Dokument ist, gehe ich doch auf Nummer sicher.
Ich habe die Textrahmen automatisch etikettiert und dann verkettet.

Das Script von Hans ist prima.


Einen schönen Sonntag
Christoph


als Antwort auf: [#571883]
X

Textrahmen per Script verketten

Kari
Beiträge gesamt: 5

17. Apr 2020, 21:09
Beitrag # 17 von 22
Beitrag ID: #574956
Bewertung:
(5003 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

wie muss das Script unten angepasst werden, wenn es auf jeder Seite mehrere Textrahmen gibt?

Vielleicht kannst du mir weiterhelfen. :-)

Dankeschön!


als Antwort auf: [#571883]

Textrahmen per Script verketten

Hans Haesler
  
Beiträge gesamt: 5826

17. Apr 2020, 21:53
Beitrag # 18 von 22
Beitrag ID: #574957
Bewertung:
(4994 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kari,

herzlich willkommen in der Adobe InDesign Skriptwerkstatt! :-)

Ich werde gerne versuchen, Dir zu helfen. Damit die Aufgabe klarer ist:
Würdest Du mir bitte ein Beispieldokument zustellen? Mit zwei oder drei Seiten.
Meine Adresse findest Du in meinem Profil.

Gruss, Hans


als Antwort auf: [#574956]

Textrahmen per Script verketten

Hans Haesler
  
Beiträge gesamt: 5826

25. Apr 2020, 15:06
Beitrag # 19 von 22
Beitrag ID: #575025
Bewertung:
(4700 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kari,

danke für das Beispiel-Dokument. Gut, dass ich es verlangte, denn so hatte ich es mir nicht vorgestellt. :-)

Ich habe Dir via WeTransfer eine erste Version des Scripts zugestellt. Hier funktioniert es wie erwartet mit Deinem Beispiel-Dokument.

Bitte durchgeben, falls Änderungen gewünscht sind. Dann werde ich es hier veröffentlichen.

Gruss, Hans


als Antwort auf: [#574957]

Textrahmen per Script verketten

Kari
Beiträge gesamt: 5

2. Mai 2020, 16:18
Beitrag # 20 von 22
Beitrag ID: #575137
Bewertung:
(4493 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das Script tut genau, was es tun sollte, deshalb nochmals ein Dankeschön hierfür. Ich bedanke mich auch für die ausführliche Erklärung. :-)

Darüber hinaus ein Lob für deine überaus große Hilfe und den netten Kontakt mit dir. ;-)

Viele Grüße

Kari


als Antwort auf: [#575025]

Textrahmen per Script verketten

Hans Haesler
  
Beiträge gesamt: 5826

2. Mai 2020, 17:33
Beitrag # 21 von 22
Beitrag ID: #575138
Bewertung:
(4477 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kari,

bitte sehr, gern geschehen. Besten Dank für Deine Rückmeldung.

*****
An interessierte Scripter: Weil es eine spezielle Aufgabe war, werde ich das Script vorerst nicht veröffentlichen. Auf jeder Seite sind vier Textrahmen. Jeder enthält eine Tabelle. Diese sind unterschiedlich hoch. Bei einigen Textrahmen ergibt das einen Überlauf.
Das Verketten diente dazu, alle Textrahmen in einen einzigen Textrahmen zu verfrachten. Das Script führt dazu folgende Schritte aus:

Code
1. Auf jeder Seite werden die Textrahmen verkettet. 
2. Eine erneute Schleife durch die Seiten und auf jeder wird der letzte
Rahmen mit dem ersten Rahmen der nächsten Seite verkettet.
3. Auf der ersten Seite wird die Verkettung des ersten Rahmens annulliert.
Ergebnis: Alle Tabellen befinden sich in diesem ersten Rahmen.
4. Neue Schleife durch die Seiten. Auf jeder Seite ab Rahmen 2 alle
Rahmen entfernen.
Und die Höhe aller ersten Rahmen auf die Höhe des Satzspiegels ändern.
5. Nochmals eine Schleife durch die Seiten und die Textrahmen verketten.
6. Auf der Musterseite den Textrahmen entfernen.
7. Mit einer "while"-Schleife Seiten einfügen und jedes Mal einen
Textrahmen und diesen verketten: Solange, bis der Textrahmen der
letzten Seite keinen Überfluss aufweist.

Ziemlich genial. Nicht wahr? ;-)

*****
Später werde ich hier die Version des Scripts veröffentlichen, welches ich schrieb, bevor ich das Beispiel-Dokument erhielt.

Gruss, Hans


als Antwort auf: [#575137]

Textrahmen per Script verketten

Hans Haesler
  
Beiträge gesamt: 5826

3. Mai 2020, 20:45
Beitrag # 22 von 22
Beitrag ID: #575145
Bewertung:
(4377 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Scripter,

und hier ist das angekündigte Script, welches alle Textrahmen eines Dokuments verkettet. Bedingung ist, dass die Textrahmen der Reihe nach – und von links oben nach rechts unten – erzeugt wurden. Denn wenn die Schichtung nicht regelmässig ist, wird das Ergebnis nicht zufriedenstellend sein.

Code
//TextRahmen_verketten_01d.js 
//© 03.05.2020 / Hans Haesler, Châtelard 52, CH-1018 Lausanne

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.", "Achtung");
exit();
}

// das Dokument im Vordergrund
var curDoc = app.documents[0];

// alle Seiten ...
var allPages = curDoc.pages;
// ... und deren Anzahl
var nPages = allPages.length;

// vier Variablen
var allTextFrames, nFrames, stopVal, lastChar;

// eine Vorwärtsschleife durch die Seiten
for (var p=0; p<nPages; p++) {
// alle Textrahmen der aktuellen Seite ...
allTextFrames = allPages[p].textFrames;
// ... und deren Anzahl
nFrames = allTextFrames.length;
if (p == nPages-1) {
stopVal = 0;
}
else {
stopVal = -1;
}
// eine Rückwärtsschleife durch die Rahmen; wenn leer: Leerschlag einfügen
for (n=nFrames-1; n>stopVal; n--) {
if (allTextFrames[n].contents == "") {
allTextFrames[n].contents = " ";
}
}
// eine Rückwärtsschleife durch die Rahmen
for (n=nFrames-1; n>stopVal; n--) {
// das letzte Zeichen im aktuellen Textrahmen
try {
lastChar = allTextFrames[n].parentStory.characters[-1].contents;
if (lastChar*1 != 1397125698) {
allTextFrames[n].parentStory.insertionPoints[-1].contents = 1397125698;
}
}
catch (e) {
}
// den aktuellen Rahmen mit dem nächsten verketten
try {
allTextFrames[n].nextTextFrame = allTextFrames[n-1];
}
catch (e) {
}
}
}

// eine Vorwärtsschleife durch die Seiten
for (var p=0; p<nPages-1; p++) {
// den letzten Rahmen der aktuellen Seite
// mit dem ersten Rahmen der nächsten Seite verketten
try {
allPages[p].textFrames[0].nextTextFrame = allPages[p+1].textFrames[-1];
}
catch (e) {
}
}

// das Ende der Aktion verkünden
var dlog = new Window("palette");
dlog.size = [320,100];
dlog.add("statictext", [80, 100, 320, 116], "Fertig.");
dlog.show();
// eine kleine Pause
$.sleep(999);
// das Fenster schliessen
dlog.close();

Falls die Anordnung der Rahmen nicht der oben genannten Vorgabe entspricht, müsste das Script erweitert werden, damit es die Reihenfolge aufgrund der Y- und X-Positionen herausfinden kann.

Gruss, Hans


als Antwort auf: [#575138]
X