[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:
(7281 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: 12625

28. Dez 2005, 11:41
Beitrag # 2 von 14
Beitrag ID: #202382
Bewertung:
(7242 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
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
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.

Viele Grüße
Martin




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:
(7236 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:
(7215 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Fehler in Zeile 3 "Objektvariable oder With-Blockvariable nicht festgelegt"

Code
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: 12625

28. Dez 2005, 13:30
Beitrag # 5 von 14
Beitrag ID: #202393
Bewertung:
(7206 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.

Viele Grüße
Martin




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:
(7197 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Code
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:
(7167 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hab es jetzt nach langem probieren doch hinbekommen.

Code
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: 12625

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

Lag es nur am "SET"?

Viele Grüße
Martin




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:
(7146 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:
(6589 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
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:
(6525 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
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:
(6261 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: 12625

15. Okt 2008, 17:23
Beitrag # 13 von 14
Beitrag ID: #370538
Bewertung:
(6259 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
app.activeDocument.layoutWindows[0].activePage = app.activeDocument.pages[0]; 


Viele Grüße
Martin




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:
(6228 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Super,
genau das habe ich gesucht.


Vielen Dank
Entek


als Antwort auf: [#370538]
X

Aktuell

Web / SEO / Blockchain / Betriebssystem
unsplash_300

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022
Veranstaltungen
08.11.2022

Frankfurt, Fraport Conference Center
Dienstag, 08. Nov. 2022, 13.30 - 18.00 Uhr

Seminar

Auf der Enfocus World Tour stellen wir Ihnen gemeinsam mit Enfocus die aktuellen Highlights von Enfocus Switch und dem Impressed Workflow Server (IWS) vor. Wir präsentieren Ihnen anhand typischer Aufgabenstellungen in einem modernen Produktionsbetrieb die Möglichkeiten, die Enfocus Switch für die Automatisierung und Standardisierung von Abläufen bietet. Wir haben sowohl für Produktionsverantwortliche als auch technisch Interessierte ein spannendes Programm vorbereitet, bei dem Sie sicherlich viel Neues erfahren werden, welches Sie in Ihrem eigenen Betrieb umsetzen können. Die Veranstaltung bietet darüber hinaus eine hervorragende Möglichkeit, sich mit anderen Anwendern und Workflow-Spezialisten auszutauschen und Antworten auf konkrete Aufgabenstellungen zu erhalten, welche Sie mit Hilfe von Enfocus Switch/IWS umsetzen möchten.

Wir sind jeweils an 2 Tagen in Frankfurt, Hamburg und München vor Ort. Der erste (halbe) Tag richtet sich in erster Linie an Betriebsleiter und Produktionsverantwortliche in Druckereien - ist also weniger technisch orientiert - sondern gibt einen Überblick zu den heutigen Möglichkeiten einer automatisierten Produktion.

Der zweite Tag (Switch Anwender-Treffen) richtet sich an bestehende Switch-Anwender und Administratoren.

Anmeldung und weitere Infos: https://www.impressed.de/schulung.php?c=sDetail&sid=310

Ja

Organisator: Enfocus/Impressed

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=310

Enfocus World Tour 2022