[GastForen Programme Print/Bildbearbeitung Adobe InDesign Inhaltsverzeichnis über Script anlegen?

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

Inhaltsverzeichnis über Script anlegen?

fendres
Beiträge gesamt: 15

28. Dez 2005, 10:22
Beitrag # 1 von 14
Bewertung:
(7794 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

langsam bin ich am verzweifeln.

Ich will mit einem VB-Script ein Inhaltsverzeichnis erstellen welches ich in einem Textrahmen platzieren will. Anlegen tut das Script das Inhaltsverzeichnis ja aber es bricht ab und das Inhaltsverzeichnis wird nicht dort platziert wo ich es will.

Fehler "Objekt unterstützt die Eigenschaft oder Methode nicht"

Dim TOCtextframe As InDesign.TextFrame

Set TOCtextframe = newPage.TextFrames.Add

TOCtextframe = myDocument.CreateTOC(myDocument.TOCStyles.Item(1), True)

Wer kann mir helfen?

mfg
Florian
X

Inhaltsverzeichnis über Script anlegen?

Martin Fischer
  
Beiträge gesamt: 12885

28. Dez 2005, 11:41
Beitrag # 2 von 14
Beitrag ID: #202382
Bewertung:
(7755 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Florian,

wenn ich Dich richtig verstanden habe, dann möchtest Du einen Textrahmen erstellen, in den später das Inhaltsverzeichnis reingeschrieben werden soll.

Dabei setzt Du "TOCtextframe" mit dem gleich, was über CreateTOC erzeugt wird.
Das geht nicht.

Das Resultat aus CreateTOC ist ein Array mit Textflüssen (stories).
Es gibt zwar das Element textFrame.parentStory, das ist aber read only. D.h. Du kannst dem keinen Inhalt zuweisen.
Um den Inhalt des mit CreateTOC erzeugten arrays in den Textrahmen zu bringen müßtest Du dem Inhalt des Textrahmens den Inhalt (content) des ersten Objekts des arrays zuweisen.

In JS geht das etwa so:
Code
  1. myTOC = app.documents[0].createTOC(app.documents[0].tocStyles[0]);
    myFrame.contents = myTOC[0].contents;


Dabei geht allerdings die Formatierung verloren.

Du kannst aber auch so vorgehen:
Über CreateTOC() erzeugst Du einen Inhaltsverzeichnis (array of stories).

Das Inhaltsverzeichnis wird, wenn Du den optionalen PlacePoint (das ist der Punkt, an dem Du etwa beim Import den Text einfließen läßt) nicht angibst, auf der aktuellen Seite am Nullpunkt eingefügt.

Beim Einfügen erhält die story (das Inhaltsverzeichnis) einen Textrahmen.

In JavaSkript kannst du auf diesen Textrahmen etwa so zugreifen:
Code
  1. myStory = app.documents[0].createTOC(app.documents[0].tocStyles[0], true)
    myFrame=myStory[0].textFrames[0];


myFrame wäre hier also der erste Textrahmen des ersten Objects des Inhaltsverzeichnisses (array of stories).

Nun kannst Du mit myFrame machen, was Du mit jedem Textrahmen machen kannst: verschieben, Koordinaten zuweisen, Objektstil zuweisen ...

Viel Glück.


als Antwort auf: [#202377]

Inhaltsverzeichnis über Script anlegen?

fendres
Beiträge gesamt: 15

28. Dez 2005, 11:45
Beitrag # 3 von 14
Beitrag ID: #202384
Bewertung:
(7749 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
danke das hat mir sehr geholfen.

auf die idee mit dem content bin ich auch schon gekommen, hab es aber nicht zum laufen bekommen.


als Antwort auf: [#202382]

Inhaltsverzeichnis über Script anlegen?

fendres
Beiträge gesamt: 15

28. Dez 2005, 13:10
Beitrag # 4 von 14
Beitrag ID: #202390
Bewertung:
(7728 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Fehler in Zeile 3 "Objektvariable oder With-Blockvariable nicht festgelegt"

Code
  1. Dim mystory As InDesign.story

    Dim toctextframe As InDesign.TextFrame

    mystory = myDocument.CreateTOC(myDocument.tocstyles.Item(1), True)


Ich muss die Story doch mit irgendeinem Propertie gleichsetzen, das wird auch der Fehler sein. Nur welches Propertie? "Contents" geht nicht und ein anderes denke ist nicht geeignet für den Inhalt.


als Antwort auf: [#202384]
(Dieser Beitrag wurde von fendres am 28. Dez 2005, 13:11 geändert)

Inhaltsverzeichnis über Script anlegen?

Martin Fischer
  
Beiträge gesamt: 12885

28. Dez 2005, 13:30
Beitrag # 5 von 14
Beitrag ID: #202393
Bewertung:
(7719 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
"mystory = myDocument.CreateTOC(myDocument.tocstyles.Item(1), True)" ist nicht ganz richtig. Du brauchst Item(1) von "myDocument.CreateTOC(myDocument.tocstyles.Item(1), True)". Das ist der Textfluß. Keine Ahnung, warum da ein Array zurückkommt. Kann man mehrere Inhaltsverzeichnisse eines Formats gleichzeitig erzeugen oder soll so etwas in Zukunft möglich sein?

Ich kenne mich in der Syntax von VB nicht aus.
Gibt Folgendes eine story zurück?

> mystory = myDocument.CreateTOC(myDocument.tocstyles.Item(1), True).Item(1)

Und von dort müßtest Du - wie oben im JS gezeigt - zurück zum ersten Textrahmen der story.

Zum Fehler in Zeile 3: Ist VB case sensitive?
Müßte "tocstyles" nicht "TOCStyles" lauten?
myDocument wird ja irgendwo definiert sein.


als Antwort auf: [#202390]

Inhaltsverzeichnis über Script anlegen?

fendres
Beiträge gesamt: 15

28. Dez 2005, 13:42
Beitrag # 6 von 14
Beitrag ID: #202396
Bewertung:
(7710 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Code
  1. myDocument.CreateTOC(myDocument.tocstyles.Item(1), True)


gibt schon eine Story zurück, auch ohne .item(1).

VB ist nicht Case Sensitive.
myDocument ist richtig deklariert, da ich vorher schon neue Seiten und Textrahmen anlege.

Es soll nur ein Inhaltsverzeichnis angelegt werden.

Danke
für
deine
Hilfe


als Antwort auf: [#202393]

Inhaltsverzeichnis über Script anlegen?

fendres
Beiträge gesamt: 15

29. Dez 2005, 10:32
Beitrag # 7 von 14
Beitrag ID: #202460
Bewertung:
(7680 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hab es jetzt nach langem probieren doch hinbekommen.

Code
  1. Dim TOCpage As InDesign.Page
    Set TOCpage = myDocument.Pages.Add

    Dim myStory As InDesign.story
    Dim TOCtextframe As InDesign.TextFrame

    Set myStory = myDocument.CreateTOC(myDocument.TOCStyles(1), True).Item(1)


jetzt kann ich den textrahmen auch verändern!

Danke nochmals
für deine Hilfe


als Antwort auf: [#202396]

Inhaltsverzeichnis über Script anlegen?

Martin Fischer
  
Beiträge gesamt: 12885

29. Dez 2005, 13:57
Beitrag # 8 von 14
Beitrag ID: #202474
Bewertung:
(7660 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Prima!

Lag es nur am "SET"?


als Antwort auf: [#202460]

Inhaltsverzeichnis über Script anlegen?

fendres
Beiträge gesamt: 15

29. Dez 2005, 13:58
Beitrag # 9 von 14
Beitrag ID: #202475
Bewertung:
(7659 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ja daran und am .Item(1)


als Antwort auf: [#202474]

Inhaltsverzeichnis über Script anlegen?

entek
Beiträge gesamt: 13

10. Jul 2008, 15:36
Beitrag # 10 von 14
Beitrag ID: #358226
Bewertung:
(7102 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,
zunächst habe ich eine kleine Anmerkung. Und zwar klappt das auslesen des TextFrames zumindest bei mir (CS3) nicht mit dem oben beschriebenen "myFrame=myStory[0].textFrames[0];". Stattdessen musste ich folgenden Weg gehen (irgendwo in den adobeforums gefunden...).
Code
  1. myFrame = myStory[0].texts[0].parentTextFrames[0];



Nun habe ich aber auch noch eine Frage zum Inhaltsverzeichnis.

Ich habe ein Skript das ein Inhaltsverzeichnis erzeugt mit allem was dazu gehört (tocStyles ect.).

Jetzt möchte ich das Inhaltsverzeichniss aktuallisieren. Das kann ich Problemlos machen indem ich das Skript ein weiteres mal ausführe. Da der zweite Parameter true ist wird alles zu meiner zufriedenheit erledigt.

Mein Problem ist folgendes. Das Skript fügt vor der ersten Seite, eine neue leere Seite für das Inhaltsverzeichnis ein. Beim jedem erneutem ausführen des Skriptes wird also eine neue Seite eingefügt.


Dieses Problem könnte ich umgehen wenn ich abfragen könnte ob bereits ein Inhaltsverzeichniss existiert. So eine Funktionalität habe ich jedoch nicht gefunden.
Hat jemand vielleicht einen Tip für mich?

Vielen Danke im voraus
Entek


als Antwort auf: [#202382]

Inhaltsverzeichnis über Script anlegen?

entek
Beiträge gesamt: 13

14. Jul 2008, 12:29
Beitrag # 11 von 14
Beitrag ID: #358633
Bewertung:
(7038 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Da mir keine bessere Lösung einfällt, mache ich es im Moment so, das ich beim erzeugen des TOC dem Frame ein konstanten Wert in das label-Attribut zuweise und in den folgenden Ausführungen nur neue Seiten einfüge wenn es kein Textframe mit dem besagten label-Attribut gibt.

Ist zwar etwas unschön, erfüllt jedoch erst einmal seinen Zweck...

Code
  1. var MARKER_CONST = "###I#AM#THE#TOC#TEXTFRAME###";

    [..]
    var firstPage = null;

    var tocExists = (doc.textFrames.item(MARKER_CONST) != null);
    if(tocExists) {
    firstPage = doc.textFrames.item(MARKER_CONST).parent;
    assert(newFirstPage instanceof Page, "...error...");
    }
    else {
    firstPage = doc.pages.add(LocationOptions.BEFORE, doc.pages[0]);
    }

    [..]
    var tocStories = doc.createTOC(myTocStyle, true);
    var tocTextframe = tocStories[0].texts[0].parentTextFrames[0];
    tocTextframe.label = MARKER_CONST;



als Antwort auf: [#358226]
(Dieser Beitrag wurde von entek am 14. Jul 2008, 12:31 geändert)

Inhaltsverzeichnis über Script anlegen?

entek
Beiträge gesamt: 13

15. Okt 2008, 17:14
Beitrag # 12 von 14
Beitrag ID: #370534
Bewertung:
(6774 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich habe nochmal eine Frage zum Inhaltsverzeichnis.

Wenn ich "document.createTOC(...);" aufrufe, wirft mein Skript eine Exception "Fehler: createTOC", sofern ich mich auf einer Musterseite befinde.

Um dies zu umgehen wollte ich die erste Seite im Dokument selektieren. "app.select(...)" funktioniert jedoch irgentwie nicht mit page-Objekten.


Hat jemand eine Idee?

Vielen Danke im Voraus
entek


als Antwort auf: [#358633]

Inhaltsverzeichnis über Script anlegen?

Martin Fischer
  
Beiträge gesamt: 12885

15. Okt 2008, 17:23
Beitrag # 13 von 14
Beitrag ID: #370538
Bewertung:
(6772 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

Antwort auf: Um dies zu umgehen wollte ich die erste Seite im Dokument selektieren.


Was heißt 'selektieren'?
Man kann keine Seiten selektieren, nur Seitenobjekte (pageItems; also textFrames, rectangles, ovals ...).

Wie man die erste Seite addressiert, dürfte Dir bekannt sein (app.activeDocument.pages[0]).
Willst Du, dass im aktiven Layoutfenster die erste Seite angezeigt wird, dann musst Du dem Layoutfenster sagen, welches seine 'aktive Seite' ist.



Code
  1. app.activeDocument.layoutWindows[0].activePage = app.activeDocument.pages[0];



als Antwort auf: [#370534]

Inhaltsverzeichnis über Script anlegen?

entek
Beiträge gesamt: 13

15. Okt 2008, 19:35
Beitrag # 14 von 14
Beitrag ID: #370554
Bewertung:
(6741 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Super,
genau das habe ich gesucht.


Vielen Dank
Entek


als Antwort auf: [#370538]
X