[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

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

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

cwenet
Beiträge gesamt: 1139

5. Aug 2012, 19:19
Beitrag # 1 von 11
Bewertung:
(3568 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag,

Ich möchte auf jeder Seite nach dem letzten Zeichen im Text einen String einfügen, der u.a. auch die Pagina enthält.
Hintergrund:
Es soll dann ein zitierfähiges E-Pub entstehen.

Über Hilfe freue ich mich.

Gruß Christoph

(Dieser Beitrag wurde von cwenet am 5. Aug 2012, 19:26 geändert)
X

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

Hans Haesler
  
Beiträge gesamt: 5826

6. Aug 2012, 09:36
Beitrag # 2 von 11
Beitrag ID: #498994
Bewertung:
(3517 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

also ... wenn Du den String nach dem letzen Zeichen einfügst, dann rutscht doch der ganze Einschub auf die nächste Seite ...

Etwas Ähnliches ist schon mal im Thema Pagnierung am Seitenanfang ausgeben CS5 diskutiert worden:
http://www.hilfdirselbst.ch/...i?post=482610#482610

Vielleicht hilft Dir das schon weiter.

Gruss, Hans


als Antwort auf: [#498985]

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

cwenet
Beiträge gesamt: 1139

6. Aug 2012, 10:22
Beitrag # 3 von 11
Beitrag ID: #498997
Bewertung:
(3498 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Hans für Deine Antwort,

da ich das Indesigndokument für den E-Pub-Export vorbereiten möchte, macht die Verschiebung nichts aus.
Ich denke, falls das per Script geht, müsste ich dann das Ganze rückwärts laufen lassen.
Wichtig ist, dass der String im Textstrom steht und nicht als separater Rahmen platziert wird.
Es soll später auf die Printversion verwiesen werden können. Deshalb muss die Seitenzahl exakt an dieser Stelle stehen.
Vielleicht hast Du noch eine Idee?

Grüße
Christoph


als Antwort auf: [#498994]

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

Hans Haesler
  
Beiträge gesamt: 5826

6. Aug 2012, 10:32
Beitrag # 4 von 11
Beitrag ID: #499000
Bewertung:
(3488 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

versuche, Deinen String beim ermittelten Insertion-Point einzufügen.
Also anstatt einen Textrahmen ...

Code
var newFrame = insPoint.textFrames.add(); 

... die Kette in den Inhalt des Einfüge-Punktes geben. Ungefähr so:

Code
insPoint.contents = paginaString; 

Gruss, Hans


als Antwort auf: [#498997]

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

cwenet
Beiträge gesamt: 1139

6. Aug 2012, 20:14
Beitrag # 5 von 11
Beitrag ID: #499023
Bewertung:
(3414 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Dankeschön Hans,

ich denke es funktioniert:

/
Code
/ die Auswahl speichern ...   
var curSel = app.selection;
// ... und prüfen
if (curSel.length == 0) {
alert ("Es ist nichts ausgewählt.", "Achtung");
exit();
}

// der Variablen 'mainStory' den Textfluss zuweisen
if (curSel[0].constructor.name == "TextFrame") {
mainStory = curSel[0].parentStory;
}
else if (curSel[0].hasOwnProperty("baseline")) {
mainStory = curSel[0].parent;
}
else {
alert ("Einen Rahmen des Textflusses auswählen.", "Stop");
exit();
}

// die Textrahmen, durch welche der Text fliesst
var allFrames = mainStory.textContainers;
// die Anzahl der Textrahmen speichern
var nFrames = allFrames.length;

// eine Schleife durch die Textrahmen
for (var f=0; f<nFrames; f++) {
// die Seite speichern, auf welcher sich der aktuelle Rahmen befindet
var pageName = allFrames[f].parentPage.name;
// der zweitletzte Einfügepunkt der letzen Zeile des Rahmens
var insPoint = allFrames[f].texts[0].lines.item(-1).insertionPoints.item(-1);
// einen Textrahmen einfügen
insPoint.contents = '\r[<- '+pageName+']\r';
allFrames[f].paragraphs[0].appliedParagraphStyle = "ePub-Seitenzahl";
}

// 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();


Irgendwie klappt aber die Zuweisung des Absatzformates "ePub-Seitenzahl" nicht zuverlässig.
Muss ich das doch irgendwie rückwärts laufen lassen?
insertionPoints.item(-1) habe ich ebenfalls verändert.

Danke und Gruß
Christoph


als Antwort auf: [#499000]

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

Hans Haesler
  
Beiträge gesamt: 5826

6. Aug 2012, 20:30
Beitrag # 6 von 11
Beitrag ID: #499024
Bewertung:
(3406 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

bitteschön.

Ohne Deine Version ausprobiert zu haben: Die Schleife muss rückwärts laufen, weil es durch das Einfügen an letzter Stelle eine Verschiebung gibt. So:

Code
// eine Schleife durch die Textrahmen    
for (var f=nFrames-1; f>-1; f--) {

Dieser Kommentar sollte geändert werden, weil ja kein Rahmen mehr eingefügt wird:

Code
// einen Textrahmen einfügen 

Und das hier ist der letze Einfügepunkt des Textrahmens:

Code
var insPoint = allFrames[f].texts[0].lines.item(-1).insertionPoints.item(-1); 

Folglich sollte das neue Absatzformat nicht dem ersten Absatz ( = allFrames[f].paragraphs[0]) des aktuellen Textrahmens zugewiesen werden. Sondern dem ersten des folgenden Rahmens ...

Gruss, Hans


als Antwort auf: [#499023]

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

cwenet
Beiträge gesamt: 1139

6. Aug 2012, 21:02
Beitrag # 7 von 11
Beitrag ID: #499025
Bewertung:
(3378 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Hans,

der Rückwärtslauf klappt.
Leider aber nicht die Zuweisung des Absatzformates.
Egal welchen Index ich hier eintrage:
allFrames[f].paragraphs[0].appliedParagraphStyle = "ePub-Seitenzahl";

Ich treffe nicht meinen neuen String:
'\r[<- '+pageName+']\r';

Ich werde das wohl besser mit Suchen und Ersetzen via GREP machen müssen.

Grüsse Christoph


als Antwort auf: [#499024]

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

Hans Haesler
  
Beiträge gesamt: 5826

6. Aug 2012, 21:09
Beitrag # 8 von 11
Beitrag ID: #499026
Bewertung:
(3370 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

wiederum ohne es ausprobiert zu haben (ist nicht meine Art, aber ich bin gerade mit einem anderen Projekt ausgelastet): Wie schon gesagt, ist das Zielobjekt nicht der erste Absatz des aktuellen Textrahmens, sondern der erste Absatz des nächsten Rahmens. Also in etwa so:

Code
allFrames[f].nextTextFrame.paragraphs[0].appliedParagraphStyle = "ePub-Seitenzahl"; 

Gruss, Hans


als Antwort auf: [#499025]

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

cwenet
Beiträge gesamt: 1139

7. Aug 2012, 20:02
Beitrag # 9 von 11
Beitrag ID: #499057
Bewertung:
(3291 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

hat leider nicht geklappt. Fehler: Null ist kein Objekt.

Aber das macht nichts. Ich kann das auch via GREP formatieren.
Das Einfügen des Strings klappt ja wunderbar.

Danke und viel Erfolg mit Deinem Projekt.

Grüße
Christoph


als Antwort auf: [#499026]

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

Hans Haesler
  
Beiträge gesamt: 5826

7. Aug 2012, 20:47
Beitrag # 10 von 11
Beitrag ID: #499058
Bewertung:
(3274 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

ein Scripter, der was werden will, darf nicht die Arme zu früh hängen lassen. :-)

In diesem Fall heisst es, untersuchen, was abläuft: Die Zeile, mit welcher das Absatzformat zugewiesen werden soll, auskommentieren. Und diese Zeile einfügen:

Code
alert (allFrames[f].nextTextFrame); 

Der erste Alert wird null anzeigen. Und alle weiteren [object TextFrame].
Aha: Dann muss man auf null testen und wenn es zutrifft, einen anderen Befehl ausführen lassen:

Code
	// einen String einfügen 
insPoint.contents = "\r[<- "+pageName+"]\r";
if (allFrames[f].nextTextFrame != null) {
allFrames[f].nextTextFrame.paragraphs[0].appliedParagraphStyle = "ePub-Seitenzahl";
}
else {
allFrames[f].paragraphs.item(-1).appliedParagraphStyle = "ePub-Seitenzahl";
}
}

Danke für die Erfolgswünsche. Mein Projekt habe ich im Moment zurückgestellt, weil ich gerade versuche, die Aufgabe von Loethelm zu lösen.

Gruss, Hans


als Antwort auf: [#499057]

Letztes Zeichen auf der Seite (CS6, Win7, Jsx)

cwenet
Beiträge gesamt: 1139

8. Aug 2012, 20:33
Beitrag # 11 von 11
Beitrag ID: #499131
Bewertung:
(3209 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Merci viel mal, lieber Hans,

klappt wunderbar.

Schöne Grüße
Christoph


als Antwort auf: [#499058]
X