[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Fußzeilen automatisieren???

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

Fußzeilen automatisieren???

ToniMontanaa
Beiträge gesamt: 426

25. Sep 2013, 13:00
Beitrag # 1 von 12
Bewertung:
(4651 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

kennt einer von euch eine Lösung um Fußzeilen in InDesign zu automatisieren. Ich habe schon länger an einer komfortablen Lösung dieses Problems gegrübelt, bin aber noch zu keinem Ergebnis gekommen. Unten der Link zum PDF wie das Layout aussehen soll. Es gibt in der rechten Spalte mit Inhalt und Artikelnummern immer mal wieder Fußzeilen zu verschiedenen Sprachkreisen die unten erklärt werden. Insgesamt gibt es momentan 56 verschiedene Sprachkreise. Da das Dokument gut über 100 Seiten hat bin ich auf der Suche nach einer Lösung diese Sprachkreise als Fußzeile automatisiert einfügen zu lassen, sobald diese oben eingefügt werden. Die InDesign-eigene Fußzeilen-Funktion fällt hierfür flach. Die Texte oben sowie auch die Fußzeilen sind komplett mit Zeichen- und Absatzformaten sowie unterschiedlichsten Grep-Stilen formatiert so das eigentlich alles mit einem Klick formatiert ist. Nur muß ich bis jetzt eben immer jede Seite nach Fußnoten absuchen und diese unten von Hand einfügen.

Wäre super wenn jemand eine Lösung parat hätte.
Grüße Stefan

Hier ein Link zur Beispieldatei
https://www.wetransfer.com/downloads/24c1e5575a48bda15fd3c6d94323845220130925104622/54bc094ee34d5631fd27f3c7348bdb7820130925104622/55c6ba
X

Fußzeilen automatisieren???

MSchmitz
Beiträge gesamt: 545

25. Sep 2013, 13:29
Beitrag # 2 von 12
Beitrag ID: #517749
Bewertung:
(4633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo stefan,

mir würde spontan die idee eines verankerten objektes einfallen, in dem du deinen fußnotentext erstellen würdest. mit entsprechender s&e könnte man die hochgestellten ziffern mit dem entsprechenden verankerten objekt versehen.

die vertikale positionierung könntest du über ein objektformat steuern. die horizontale positionierung müsste man ab der zweiten fußnote wohl händisch vornehmen.


als Antwort auf: [#517748]

Fußzeilen automatisieren???

Kai Rübsamen
Beiträge gesamt: 4684

25. Sep 2013, 14:47
Beitrag # 3 von 12
Beitrag ID: #517753
Bewertung:
(4597 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich weis nicht, ob ich es richtig verstanden habe: Suche auf der Seite "1" mit Zeichenformat hochgestellt und schreibe dann in einen Textrahmen etwas rein, was 1 zugeordnet ist?

Anbei mal ein Testdokument und ein paar erste Skriptzeilen. Kann mir hier bitte ein Skripter verraten, warum ich nicht nur auf der ersten oder aktiven Seite suchen kann > var fund = curPage.findGrep(); bringt mir einen Fehler.

Code
var curDoc = app.activeDocument; 
var curPage = curDoc.pages[0];
var tf = curPage.textFrames.item("meinRahmen");

var searchList = [
["1", "D-GB-I-E-P"],
["8", "D-GB"]
];

for ( var j = 0; j < searchList.length; j++ ) {
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat= searchList[j][0];
app.findGrepPreferences.appliedCharacterStyle = curDoc.characterStyles.itemByName("fn");
var fund = app.findGrep();
if (fund.length > 0) {
tf.insertionPoints[-1].contents = searchList[j][0] + " " + searchList[j][1] + " ";
}
}

app.findGrepPreferences = app.changeGrepPreferences = null;



als Antwort auf: [#517749]
(Dieser Beitrag wurde von Kai Rübsamen am 25. Sep 2013, 14:48 geändert)

Anhang:
FoundFn.idml (33.1 KB)

Fußzeilen automatisieren???

ToniMontanaa
Beiträge gesamt: 426

25. Sep 2013, 15:59
Beitrag # 4 von 12
Beitrag ID: #517754
Bewertung:
(4569 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Markus,

ohne das jetzt ausprobiert zu haben, kann ich diese Lösung glaub verwerfen, da ich die S&E nicht auf einzelne Seiten anwenden. Es kann nämlich sein das bspw. auf Seite 1 die Fußnoten 3, 6, 9 vorkommen und auf Seite 2 die Fußnoten 3, 12, 18. Das heißt es sollten auch nur die Fußnoten am Seitenende erscheinen die auf der jeweiligen Seite auch vorkommen. Wenn ich dann noch die horizontale position händisch vornehmen muß bin ich mit der momentanen Arbeitsweise schneller.
Trotzdem Danke.


als Antwort auf: [#517749]

Fußzeilen automatisieren???

ToniMontanaa
Beiträge gesamt: 426

25. Sep 2013, 16:15
Beitrag # 5 von 12
Beitrag ID: #517755
Bewertung:
(4559 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

du hast das absolut richtig verstanden. Hab es gerade mal in deinem Testdokument getestet. So in etwa habe ich mir das vorgestellt.
Kann man dies nun im gesamten Dokument auf einmal anwenden oder Seite für Seite? Es sollten eben auf jeder Seite nur die Fußnoten erklärt sein die auch auf der jeweiligen Seite vorkommt.
Wo kann ich im Skript den Rahmen angeben in den die Fußzeile eingefügt wird?
Danke schon mal.
Gruß Stefan


als Antwort auf: [#517753]

Fußzeilen automatisieren???

Kai Rübsamen
Beiträge gesamt: 4684

25. Sep 2013, 16:34
Beitrag # 6 von 12
Beitrag ID: #517756
Bewertung:
(4543 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Stefan,

das Skript ist nur ein erster Versuch ob es überhaupt geht und vorallem ob ich überhaupt richtig liege. Im aktuellen Stand kannst du es noch nicht verwenden.

Im aktuellen Stand gehe ich davon aus, dass es für den Fußnotenverweis ein Zeichenformat gibt und dass der Textrahmen ein Label "mein Rahmen" hat (Den Rahmen anwählen und im Ebenenbedienfeld benennen). Wenn das zu umständlich ist, evtl. ein Objektformat zuweisen. > Hier war ich mir als Skriptanfänger allerdings nicht sicher, ob ich diesen Rahmen direkt ansprechen kann oder ob ich ihn erst in einer Schleife durch alle Rahmen ermitteln muss. D.h. das mit dem labeln war schneller. Alternativ könnte man den Rahmen auch erst erzeugen lassen.

Zur Frage der Suche: Ich gehe stark davon aus, dass man die Suche auf die Seite beschränken, bzw. jede Seite einzeln durchgehen kann.
Auch interessant: Was soll denn da wie mit welchen Leerzeichen oder sonstigen Abständen eingefügt werden.

Vorschlag:
Bau bitte ein finales Beispiel mit 3-5 Seiten u. untersch. Ziffern inkl. Text im Rahmen, Label oder Objektformat u. sende mir das per PM. Ich würde heute Abend versuchen (!) das final zu bauen.


als Antwort auf: [#517755]

Fußzeilen automatisieren???

Uwe Laubender
Beiträge gesamt: 5316

25. Sep 2013, 17:36
Beitrag # 7 von 12
Beitrag ID: #517760
Bewertung:
(4507 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat von Kai Kann mir hier bitte ein Skripter verraten, warum ich nicht nur auf der ersten oder aktiven Seite suchen kann > var fund = curPage.findGrep(); bringt mir einen Fehler.


Hallo, Kai!
Ganz einfach: die Methode findGrep() ist für Seiten-Objekte "Pages" nicht verfügbar.

findGrep() gibt's für (Beispiel InDesign CS5.5):

Application
Cell
Character
Column
Document
InsertionPoint
Line
Paragraph
Row
Story
Table
Text
TextColumn
TextFrame
TextPath
TextStyleRange
Word
XMLElement
XmlStory

(Ende Gelände)

Siehe auch:
http://www.jongware.com/idjshelp.html

Schau Dir da mal die durchsuchbaren chm-Dateien an.


als Antwort auf: [#517753]

Fußzeilen automatisieren???

Kai Rübsamen
Beiträge gesamt: 4684

26. Sep 2013, 12:55
Beitrag # 8 von 12
Beitrag ID: #517787
Bewertung:
(4393 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hm, das ist dann der Punkt, wo ich als Skriptanfänger nicht mehr weiterkomme :(
Wenn es keinen direkten Zugriff gibt, nehme ich an, das es 3 Schleifen braucht?

1. Eine für die searchList
2. Eine für das Durchlaufen der Seite
3. Eine für das Durchlaufen aller Textrahmen auf einer Seite

Auch interessant: Wenn das Vorkommen auf einer Seite 1x gefunden wird, sollen ja nicht mehr die anderen Rahmen durchlaufen werden.

Ich habe mal in einer einfachen Variaten versucht, die Textrahmen auf Seite 1 zu durchlaufen u. bilde mir ein, dass das auch vorhin ohne Fehlermeldung geklappt hat. Jetzt erhalte ich allerdings den Fehler bei var fund = tf.findGrep() "Objekt enthält keinen Text zum Suchen/Ersetzen"
Wenn ich allerdings manuell suche oder mir auch den S/E-Dialog nach Abbruch des Skriptes ansehe, passt das eigentlich.

Fragen an die, die skripten können:
1. Was mache ich mit der Suche falsch?
2. Wie müssen die Schleifen am besten verschachtelt werden, damit alle Textrahmen in einer Seite mit versch. Dingen im mehrdim. Array searchList durchlaufen werden können.

Der OP u. ich danken für eine Antwort ;-)
@ Stefan: Wenn sich hier keiner meldet, musst du leider händisch formatieren.

Code
main(); 

function main() {

var curDoc = app.activeDocument;
var allTextFrames = curDoc.pages[0].textFrames;

var hit = false;

for (var t=0; t<allTextFrames.length; t++) {
var tf = allTextFrames[t];
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat= "1";
app.findGrepPreferences.appliedCharacterStyle = curDoc.characterStyles.itemByName("Tabelle Hochzahl");
// wirft einen Fehler
var fund = tf.findGrep();
// wenn der Suchstring 1x gefunden wird
if (fund.length != 0) {
hit = true;
break;
}
}

if (hit == true) {
alert("Fundstelle auf der Seite");
// hier würde ich dann den ersten Text in den Rahmen schreiben
}
else {
alert("Keine Fundstelle auf der Seite");
}
}



als Antwort auf: [#517760]

Fußzeilen automatisieren???

Kai Rübsamen
Beiträge gesamt: 4684

27. Sep 2013, 10:02
Beitrag # 9 von 12
Beitrag ID: #517818
Bewertung:
(4328 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hm, 60 Leute habens gelesen und keiner hat ne Idee?

Ich versteh es gerade so:
Wenn ein Textrahmen leer ist und dieser durchsucht werden soll, kommt der Fehler. Ich muss also dafür sorgen, dass nur Textrahmen mit Inhalt durchsucht werden dürfen.

Code
main (); 

function main() {

var curDoc = app.activeDocument;
var allPages = curDoc.pages;

for (var i=0; i < allPages.length; i++) {
var curPage = allPages[i];
var targetFrame = curPage.textFrames.item("meinRahmen");
app.findGrepPreferences = app.changeGrepPreferences = null;
app.findGrepPreferences.findWhat = "1";
app.findGrepPreferences.appliedCharacterStyle = curDoc.characterStyles.itemByName("rot");
var tfs = curPage.textFrames;

for (var t=0; t < tfs.length; t++) {
var tf = tfs[t];
//tf.select();
if (tf.contents != 0) {
var res = tf.findGrep();
}
else { continue; }
if (res.length != 0) {
targetFrame.insertionPoints[-1].contents = "Erster Text";
res = null;
break;
}
}
}
}


In dem Zusammenhang habe ich noch eine andere Frage:
Ich hatte zuerst nach if (tf.contents != 0) auch die zweite if-Anweisung mit
if (res.length != 0 && res != undefined) ausführen lassen. Das funktioniert wohl auch.

Ich wundere mich aber, dass "undefined" mit Anführungen falsch wäre; also undefined ohne Anführungen richtig ist UND dabei nicht als reserviertes Wort blau ausgezeichnet wird?


als Antwort auf: [#517787]

Fußzeilen automatisieren???

gfellenz
Beiträge gesamt: 121

27. Sep 2013, 10:42
Beitrag # 10 von 12
Beitrag ID: #517822
Bewertung:
(4314 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

leider gibt es einen Fehler wenn kein Text im Textrahmen enthalten ist, was ich persönlich etwas unglücklich finde.

Ansonsten: Ich würde die Abfragen etwas anders gestalten:

Code
if (tf.contents != "")  {  
var res = tf.findGrep();
if (res.length > 0) {
targetFrame.insertionPoints[-1].contents = "Erster Text";
break;
}


Im ersten Fall willst du ja wissen, dass tf ja einen leeren String enthält im zweiten möchtest du wissen ob mindestesn 1 Ergebnis gab. Deine Variante funktinioniert genauso ist aber aus meiner Sicht ein schlechterer selbstdokumentierender Code. Wenn du Lust auf Verwirrung hast, dann guck dir das mal an: http://tinlizzie.org/~ohshima/truefalse/


Zum Thema [b]undefined das ist leider eine unglückliche Designentscheidung bei der Entwicklung der Sprache JavaScript gewesen. [b]undefined ist eine vordefinierte Variable, die dem Zustand einer einer nicht festgelegten Variable bzw. den Rückgabewert von Funktionen entspricht (sofern sie nicht explizit mit return etwas zurückliefern). Gleichzeitig gibt es aber auch den Typ [b]Undefined (wie Number, Boolean oder String) der den primitiven Wert [b]undefined hat.

Also:

Code
var a; 
alert(typeof a)
var b = c();
alert(typeof b)
function c () {}


Man könnte die Variable undefined verändern, das folgende Beispiel zeigt hoffentlich warum das eine ganz schlechte Idee ist:

Code
undefined = "Ich bin schlauer als der Rest"; 
var a;
alert(typeof a);
a = undefined;
alert(typeof a);






In der Praxis solltest du es wie ein reserviertes Wort verwenden.


als Antwort auf: [#517753]

Fußzeilen automatisieren???

Kai Rübsamen
Beiträge gesamt: 4684

1. Okt 2013, 16:25
Beitrag # 11 von 12
Beitrag ID: #517961
Bewertung:
(4187 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gregor,

danke für deine Hinweise u. die ein oder andere Erklärung außerhalb von hds :)

@ all:
Ich habe das Skript für Stefan fertigestellt und Roland Dreger gebeten, noch eine ProgressBar zu spendieren.
Anbei mein fertiges Ergebnis. Stefan hat es bereits getestet u. braucht jetzt bei 56 möglichen Verweisen pro Seite für 140 Seiten ca. 7 Minuten. Zu Fuß wären es womöglich Stunden gewesen ;-)

Was das Skript macht:
1. Sucht seitenweise alle Textrahmen nach in einer searchList festgelegten Kriterien ab
2. Wird etwas gefunden, wird ein Alternativtext in einen gelabelten Textrahmen auf der Seite übertragen
3. Gibt es bereits Text im Rahmen, wird dieser gelöscht und dann der neue Text eingetragen. D.h. das Skript reagiert auch auf Veränderungen durch nachträgliche Korrekturen und kann mehrmals ausgeführt werden.

Ich hab jede Menge beim Schreiben gelernt. Viell. nützt es ja jemand. Falls ein erfahrener Skripter größere Fehler findet, freue ich mich über Verbesserungen hier im Beitrag. Danke.


als Antwort auf: [#517822]
Anhang:
WriteReferenceToTextFrame_601.jsx (2.90 KB)

Fußzeilen automatisieren???

ToniMontanaa
Beiträge gesamt: 426

1. Okt 2013, 17:19
Beitrag # 12 von 12
Beitrag ID: #517965
Bewertung:
(4168 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

auch hier nochmal großen Dank für deine Bemühungen mit dem Skript.

Wie du ja schon geschrieben hast ist mit diesem Skript meine Arbeitszeit von ca. 1,5 Stunden am Schluss eines jeden Kataloges (gibt es ja wie erwähnt in etlichen Sprachen) auf 7 Minuten geschrumpft. Einfach Super!!!

Bin immer wieder begeistert und zugleich erfreut zu sehen, wie viel Leute es in diesem Forum gibt, die etliche Stunden ihrer privaten Zeit opfern um anderen weiter zu helfen ohne dafür etwas zu bekommen. Außer dem Dank und Wissen den man sich manchmal auch selbst aneignet.

Grüße an alle und vor allem an Kai.
Danke.


als Antwort auf: [#517961]
X