[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

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

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

cwenet
Beiträge gesamt: 1139

26. Okt 2011, 15:57
Beitrag # 1 von 17
Bewertung:
(5755 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag,

hiermit möchte ich den Inhalt aller Notizen an der Stelle im Text ausgeben, an der die Notiz zuvor platziert wurde:

Code
var myDocument = app.activeDocument; 

var mypages=myDocument.pages.length;
for(p=0;p<mypages;++p)
{
for (t=0;t<myDocument.pages.item(p).allPageItems.length;++t)
{
if(myDocument.pages.item(p).allPageItems[t].constructor.name=="TextFrame")
{
for (i=0;i<myDocument.pages.item(p).allPageItems[t].paragraphs.length;++i)
{
for (j=0;j<myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.length;++j)
{



if (myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j].userName == "Satzanweisung"){
var myNote = myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j];
var myParagraph = myDocument.pages[p].allPageItems[t].paragraphs[i];

myParagraph.insertionPoints[-1].contents = '\r'+myNote.texts[0].contents+'\r\r';

}
}
}
}
}
}


Das funktíoniert fast prima.
Der Inhalt der Notiz wird am Absatzende ausgegeben (3 neue Absätze entstehen):
[Leerer Absatz]
Inhalt der Notiz
[Leerer Absatz]

Nun möchte ich diese 3 neu entstandenen Absätze jeweils mit einem Absatzformat versehen.
Wie komme ich denn da hinterher dran?

Und:
mit insertionPoints[-1] gehe ich ans Absatzende. Wie schaffe ich es direkt an der Notizposition meine
3 neuen Absätze zu platzieren?

Grüße
Christoph
X

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

Martin Fischer
  
Beiträge gesamt: 12783

26. Okt 2011, 16:30
Beitrag # 2 von 17
Beitrag ID: #483101
Bewertung:
(5745 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

Antwort auf: mit insertionPoints[-1] gehe ich ans Absatzende. Wie schaffe ich es direkt an der Notizposition meine 3 neuen Absätze zu platzieren?


Wirf mal einen Blick auf die Eigenschaften einer note.
Z.B. in der JavaScript Referenz von jongware, die ich Dir ans Herz lege.

Dort findest Du etwas, was Dir sagt, wo im Text die Notiz sitzt.


als Antwort auf: [#483100]
(Dieser Beitrag wurde von Martin Fischer am 26. Okt 2011, 16:31 geändert)

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

cwenet
Beiträge gesamt: 1139

27. Okt 2011, 14:15
Beitrag # 3 von 17
Beitrag ID: #483177
Bewertung:
(5692 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke für Deine Antwort. Das Einzige was passen könnte habe ich versucht. Jetzt sieht es so aus. Aber die Eigenschaft wird leider nicht unterstützt. Ich sehe die Lösung leider nicht:

Auch klappt die Zuweisung der Absatzformate nicht.
Jetzt haben alle Absätze das Format "Legende_Ende"

Code
var myDocument = app.activeDocument; 

var mypages=myDocument.pages.length;
for(p=0;p<mypages;++p)
{
for (t=0;t<myDocument.pages.item(p).allPageItems.length;++t)
{
if(myDocument.pages.item(p).allPageItems[t].constructor.name=="TextFrame")
{
for (i=0;i<myDocument.pages.item(p).allPageItems[t].paragraphs.length;++i)
{
for (j=0;j<myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.length;++j)
{



//if (myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j].userName == "Satzanweisung"){
var myNote = myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j];
var myParagraph = myDocument.pages[p].allPageItems[t].paragraphs[i];

var notizpos = myNote.insertionPoints;

myParagraph.insertionPoints[notizpos].contents = '\r';
myParagraph.appliedParagraphStyle = "Legende_Start";

myParagraph.insertionPoints[notizpos].contents = myNote.texts[0].contents;
myParagraph.appliedParagraphStyle = "Legende_txt";

myParagraph.insertionPoints[notizpos].contents = '\r\r';
myParagraph.appliedParagraphStyle = "Legende_Ende";

//}
}
}
}
}
}


Gruß
Christoph


als Antwort auf: [#483101]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

Martin Fischer
  
Beiträge gesamt: 12783

27. Okt 2011, 14:24
Beitrag # 4 von 17
Beitrag ID: #483179
Bewertung:
(5689 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Das Einzige was passen könnte habe ich versucht.


Versuch's nochmal mit dem storyOffset einer note, anstatt den insertionPoints.


als Antwort auf: [#483177]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

cwenet
Beiträge gesamt: 1139

27. Okt 2011, 14:52
Beitrag # 5 von 17
Beitrag ID: #483192
Bewertung:
(5672 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So kommt schon mal der richtige Wert heraus:

Code
var notizpos = myNote.storyOffset.index; 
alert(notizpos);


Hier wird aber jetzt gemeckert:

Code
myParagraph.insertionPoints[notizpos].contents = '\r'; 
myParagraph.appliedParagraphStyle = "Legende_Start";

myParagraph.insertionPoints[notizpos].contents = myNote.texts[0].contents;
myParagraph.appliedParagraphStyle = "Legende_txt";

myParagraph.insertionPoints[notizpos].contents = '\r\r';
myParagraph.appliedParagraphStyle = "Legende_Ende";


Objekt ungültig.

Bitte um weitere Hilfe.
Gruß
Christoph


als Antwort auf: [#483179]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

Martin Fischer
  
Beiträge gesamt: 12783

27. Okt 2011, 15:38
Beitrag # 6 von 17
Beitrag ID: #483216
Bewertung:
(5664 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
StoryOffset gibt einen InsertionPoint zurück.
Dessen Index bezieht sich auf die parentStory, nicht auf den Absatz.
Deswegen scheitert myParagraph.insertionPoints[notizpos], wenn myParagraph nicht zufällig der erste Absatz im Textabschnitt ist.

Ins Blaue hinein ... versuch's mal mit
Code
myNote.storyOffset.contents = '\r' + myNote.texts.firstItem().contents + '\r\r'; 


Eventuell hilft auch das Verschieben move() des Textobjekts aus der Notiz hinter (LocationOptions.AFTER) oder vor (LocationOptions.BEFORE) den Einfügepunkt myNote.storyOffset.


als Antwort auf: [#483192]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

cwenet
Beiträge gesamt: 1139

27. Okt 2011, 16:03
Beitrag # 7 von 17
Beitrag ID: #483225
Bewertung:
(5652 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Martin für die Erklärung und den Codeschnipsel,

es funktioniert fast.
Nun werden diese 3 Absätze insgesmat 12 mal ausgegeben, obwohl ich nur 1 Notiz habe. Insgeamt gibt es in meinem Testdokument nur 1 Seite mit 2 Absätze.
Komisch, woher nimmt Indesign die Information alles gleich 12 mal auszugeben?

Grüße
Christoph


als Antwort auf: [#483216]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

Martin Fischer
  
Beiträge gesamt: 12783

27. Okt 2011, 16:19
Beitrag # 8 von 17
Beitrag ID: #483228
Bewertung:
(5641 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Komisch, woher nimmt Indesign die Information alles gleich 12 mal auszugeben?


Bei wunderbaren Vermehrungen würde ich mir als Erstes mal die (verschachtelten) Schleifen genauer ansehen.


als Antwort auf: [#483225]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

cwenet
Beiträge gesamt: 1139

27. Okt 2011, 18:51
Beitrag # 9 von 17
Beitrag ID: #483243
Bewertung:
(5609 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke für den Tipp Martin,

ich vermute mal, dass es an dem Zähler i liegt.
Während der Ausführung kommen ja neue Absätze hinzu.
Evtl. werden die auch mitgezählt.
Muss ich das womöglich ganz anders aufbauen?

Da komme ich aber leider nicht mehr weiter.
Reicht da nicht nur 1 Schleife?

Gruß
Christoph


als Antwort auf: [#483228]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

WernerPerplies
Beiträge gesamt: 2762

27. Okt 2011, 19:10
Beitrag # 10 von 17
Beitrag ID: #483245
Bewertung:
(5603 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

ich weiß nicht, ob Du uns das ganze Script gezeigt, aber falls Du noch irgendwo eine Schleife mit i verwendest, hast Du ein Problem:

for (i=0;i<myDocument.pages.item(p).allPageItems[t].paragraphs.length;++i)
{
for (j=0;j<myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.length;++j)
{
i=0 und j=0 sind bei JavaScript Todsünden, Du definierst da globale Variablen!

korrekt wäre:

var i=0, ...
und
var j=0, ...

Ergänzung:

Und Du hast natürlich recht, Du produzierst neue Absätze, da ändert sich die Anzahl der Absätze und i zeigt auf neu erzeugte Absätze.

Probier mal, die Anzahl der Absätze am Anfang in eine Variable umzuspeichern und die Absätze von hinten zu durchlaufen, in etwa so:
var AnzahlDerAbsätze = myDocument.pages.item(p).allPageItems[t].paragraphs.length-1;
for (var i= AnzahlDerAbsätze; i>=0; i--)
{...}


als Antwort auf: [#483243]
(Dieser Beitrag wurde von WernerPerplies am 27. Okt 2011, 19:25 geändert)

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

cwenet
Beiträge gesamt: 1139

27. Okt 2011, 19:23
Beitrag # 11 von 17
Beitrag ID: #483246
Bewertung:
(5591 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank Werner für den Hinweis,

ich zeige nochmals meinen aktuellen Stand:

Code
var myDocument = app.activeDocument; 

var mypages=myDocument.pages.length;

for(var p=0;p<mypages;++p)
{
for (var t=0;t<myDocument.pages.item(p).allPageItems.length;++t)
{
if(myDocument.pages.item(p).allPageItems[t].constructor.name=="TextFrame")
{
for (var i=0;i<myDocument.pages.item(p).allPageItems[t].paragraphs.length;++i)
{
for (var j=0;j<myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.length;++j)
{


//if (myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j].userName == "Satzanweisung"){
var myNote = myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j];
var myParagraph = myDocument.pages[p].allPageItems[t].paragraphs[i];


myNote.storyOffset.contents = '\r' + myNote.texts.firstItem().contents + '\r\r';

//}
}
}
}
}
}


Wahrscheinlich muss ich dass besser alles Rückwärts laufen lassen.
Kenne mich aber immer noch zu wenig aus.

Grüße
Christoph


als Antwort auf: [#483245]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

WernerPerplies
Beiträge gesamt: 2762

27. Okt 2011, 19:24
Beitrag # 12 von 17
Beitrag ID: #483248
Bewertung:
(5590 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Christoph,
ich habe meinen Beitrag noch einmal geändert.


als Antwort auf: [#483246]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

cwenet
Beiträge gesamt: 1139

27. Okt 2011, 19:45
Beitrag # 13 von 17
Beitrag ID: #483250
Bewertung:
(5575 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieben Dank Werner,
so klappt es.

Wo ich mir noch die Zähne ausbeisse, ist die Formatierung der 3 neu entstandenen Absätze:

Code
var myDocument = app.activeDocument; 

var mypages=myDocument.pages.length;

for(var p=0;p<mypages;++p)
{
for (var t=0;t<myDocument.pages.item(p).allPageItems.length;++t)
{
if(myDocument.pages.item(p).allPageItems[t].constructor.name=="TextFrame")
{

var AnzahlDerAbsaetze = myDocument.pages.item(p).allPageItems[t].paragraphs.length-1;

for (var i= AnzahlDerAbsaetze; i>=0; i--)
{
for (var j=0;j<myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.length;++j)
{


var myNote = myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j];
var myParagraph = myDocument.pages[p].allPageItems[t].paragraphs[i];


myNote.storyOffset.contents = '\r\r' ;
myParagraph.paragraphs[i-1].appliedParagraphStyle = "Legende_Start" ;

myNote.storyOffset.contents = myNote.texts.firstItem().contents;
myParagraph.paragraphs[i].appliedParagraphStyle = "Legende_txt" ;

myNote.storyOffset.contents = '\r' ;
myParagraph.paragraphs[i+1].appliedParagraphStyle = "Legende_Ende" ;

//myNote.storyOffset.contents = '\r\r' + myNote.texts.firstItem().contents + '\r';


}
}
}
}
}


So will mir das nicht gelingen.
Hat jemand noch eine Idee?
Danke und Gruß
Christoph


als Antwort auf: [#483248]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

WernerPerplies
Beiträge gesamt: 2762

27. Okt 2011, 19:52
Beitrag # 14 von 17
Beitrag ID: #483252
Bewertung:
(5573 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

ich schaue mir das morgen früh noch mal genauer an, aber so auf den ersten Blick, müsste das nicht
Code
[i], [i+1], [i+2] 

heißen?


als Antwort auf: [#483250]

Inhalt von Notizen in den Fliesstext bringen (CS5, WIN, JSX)

cwenet
Beiträge gesamt: 1139

27. Okt 2011, 20:32
Beitrag # 15 von 17
Beitrag ID: #483255
Bewertung:
(5545 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

ja, dachte ich auch erst.
Aber ich bekomme immer einen Fehler: Objekt ungültig.

Diese Zeile wirft den Fehler aus:
var myDocument = app.activeDocument;

Code
var mypages=myDocument.pages.length;  

for(var p=0;p<mypages;++p)
{
for (var t=0;t<myDocument.pages.item(p).allPageItems.length;++t)
{
if(myDocument.pages.item(p).allPageItems[t].constructor.name=="TextFrame")
{

var AnzahlDerAbsaetze = myDocument.pages.item(p).allPageItems[t].paragraphs.length-1;

for (var i= AnzahlDerAbsaetze; i>=0; i--)
{
for (var j=0;j<myDocument.pages.item(p).allPageItems[t].paragraphs.item(i).notes.length;++j)
{


var myNote = myDocument.pages[p].allPageItems[t].paragraphs[i].notes[j];
var myParagraph = myDocument.pages[p].allPageItems[t].paragraphs[i];




myNote.storyOffset.contents = '\r\r' + myNote.texts.firstItem().contents + '\r';

myParagraph.paragraphs[i].appliedParagraphStyle = "Legende_Start" ; <<====== Fehler
myParagraph.paragraphs[i+1].appliedParagraphStyle = "Legende_txt" ;
myParagraph.paragraphs[i+2].appliedParagraphStyle = "Legende_Ende" ;

}
}
}
}
}


Gruß
Christoph


als Antwort auf: [#483252]
X