[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Verankerte Rahmen lösen (WIN CS4 JS)

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

Verankerte Rahmen lösen (WIN CS4 JS)

cwenet
Beiträge gesamt: 1082

15. Apr 2010, 15:45
Beitrag # 1 von 7
Bewertung:
(2139 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Tag,

mit diesem Script (habe ich hier gefunden) möchte ich meine Mariginalflächen als Text wieder in den Fliesstext zurückführen. Wie schaffe ich es, das ich noch ein Absatzformat zuweisen kann?
Meine eingefügte Scriptzeile will nicht funktionieren.
Ausserdem soll der gefundene Marginaltext vor den aktuellen Absatz platziert werden.

Code
var myStartTag = "\r<Marg>";  
var myEndTag = "</Marg>\r";

Object.prototype.isText = function()
{
switch(this.constructor.name)
{
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
return true;
default :
return false;
}
}

if ((app.selection.length > 0) && (app.selection[0].isText))
{
var myItems = app.selection[0].allPageItems;
for (oneItem = myItems.length-1; oneItem >= 0; oneItem--)
{
if (myItems[oneItem].constructor.name == "TextFrame")
{
//myItems[oneItem].parent.insertionPoints[0].fillColor = "Red";
myItems[oneItem].parent.insertionPoints[0].contents = myStartTag; // Einfügen des Start-Tags

//myItems[oneItem].parent.insertionPoints[-1].fillColor = "Red";
myItems[oneItem].parent.insertionPoints[-1].contents = myEndTag; // Einfügen des End-Tags
// Verschieben des Inhalts des verankerten Textrahmens
myItems[oneItem].texts[0].move(LocationOptions.before, myItems[oneItem].parent.insertionPoints[0]);
myItems[oneItem].paragraphs[0].appliedParagraphStyle = "Marginalie";
myItems[oneItem].remove(); // Löschen des verankerten Textrahmens
}
}
}


Über Hilfe freut sich Christoph, Grüße
X

Verankerte Rahmen lösen (WIN CS4 JS)

Martin Fischer
  
Beiträge gesamt: 12684

16. Apr 2010, 07:41
Beitrag # 2 von 7
Beitrag ID: #439332
Bewertung:
(2104 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

Du verschiebst erst den Text aus dem verankerten Textrahmen
myItems[oneItem].texts[0].move(LocationOptions.before, myItems[oneItem].parent.insertionPoints[0]);,

dann versuchst Du, dem ersten Absatz in dem verankerten Textrahmen ein Absatzformat zuzuweisen
myItems[oneItem].paragraphs[0].appliedParagraphStyle = "Marginalie";

und schließlich löscht Du den verankerten Textrahmen
myItems[oneItem].remove();.



Du solltest das Absatzformat vor dem Verschieben des Texts aus dem verankerten Textrahmen zuweisen. Und zwar dem gesamten Text im Textabschnitt des verankerten Textrahmens: myItems[oneItem].parentStory.texts[0].appliedParagraphStyle = "Marginalie";

Die Tags würde ich vor der Formatzuweisung oder danach (auf jeden Fall aber vor dem Verschieben) dem Text des verankerten Rahmens hinzufügen.

Die Position für den Start-Tag wäre myItems[oneItem].insertionPoints[0].
Die des End-Tags myItems[oneItem].parentStory.texts[0].insertionPoints[-1].
Bestimme jeweils deren contents.

----
Ach ja, das Ziel für das Verschieben wäre nicht die Position am Anker des verankerten Textrahmens, sondern am ersten Einfügepunkt des ersten Absatzes des Ankerpunkts.


als Antwort auf: [#439286]
(Dieser Beitrag wurde von Martin Fischer am 16. Apr 2010, 07:43 geändert)

Verankerte Rahmen lösen (WIN CS4 JS)

cwenet
Beiträge gesamt: 1082

16. Apr 2010, 08:33
Beitrag # 3 von 7
Beitrag ID: #439338
Bewertung:
(2088 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank Martin,

nun habe ich das Script wie folgt umgebaut:

Code
if ((app.selection.length > 0) && (app.selection[0].isText))   
{
var myItems = app.selection[0].allPageItems;
for (var oneItem=0; oneItem<myItems.length; oneItem++)
{
if (myItems[oneItem].constructor.name == "TextFrame")
{

myItems[oneItem].parentStory.texts[0].appliedParagraphStyle = "Marginalie";

myItems[oneItem].insertionPoints[0].contents = myStartTag; // Einfügen des Start-Tags

myItems[oneItem].parentStory.texts[0].insertionPoints[-1].contents = myEndTag; // Einfügen des End-Tags

// Verschieben des Inhalts des verankerten Textrahmens
myItems[oneItem].texts[0].move(LocationOptions.before, myItems[oneItem].parent.texts[0].paragraphs[0].insertionPoints[0]);

myItems[oneItem].remove(); // Löschen des verankerten Textrahmens
}
}
}


Klappt sehr gut. Ich habe die Schleife umgedreht, damit die Reihenfolge der neu platzierten Marginal-Absätze stimmt.
Bin mir nicht sicher, ob das so in Ordnung geht. Kann ich in diesem Fall ohne Bedenken in beide Richtungen das Dokument durchgehen? Da bin ich mir auch nie sicher, wann vorwärts und wann rückwärts abgearbeitet werden soll.

Wie kann ich das Script noch anpassen, dass nich der gesamte Text markiert werden muss?

Gruss Christoph


als Antwort auf: [#439332]

Verankerte Rahmen lösen (WIN CS4 JS)

Martin Fischer
  
Beiträge gesamt: 12684

16. Apr 2010, 08:55
Beitrag # 4 von 7
Beitrag ID: #439339
Bewertung:
(2079 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Christoph,

das sieht gut aus.
Bis auf die Richtungsumkehrung der Schleife.
Funktioniert diese so?

Bei jedem Durchgang der Schleife wird ein Element der Sammlung, durch die Du schleifst, weggenommen. Und zwar von vorne her. Damit veränderst Du die Indexierung der weiteren Elemente.
In so einem Fall würde ich sicherheitshalber die Elemente von hinten her abarbeiten.
Das hat keine Nachteile, verhindert aber ggf. Probleme, die durch die Veränderung der Indexe der Elemente der Sammlung entstehen könnten.

> Da bin ich mir auch nie sicher, wann vorwärts und wann rückwärts abgearbeitet werden soll.

Grundsätzlich ist rückwärts in den meisten Fällen sicherer.
Weitere Schritte innerhalb des Skripts können es aber auch gelegentlich erforderlich machen, dass von vorne nach hinten gearbeitet wird.
Und das Voranschreiten entspricht eher dem manuellen Vorgehen eines Anwenders.


> Wie kann ich das Script noch anpassen, dass nich der gesamte Text markiert werden muss?

Du hat oben sehr guten Gebrauch von parentStory gemacht.
Das hilft Dir auch hier weiter.


als Antwort auf: [#439338]

Verankerte Rahmen lösen (WIN CS4 JS)

cwenet
Beiträge gesamt: 1082

16. Apr 2010, 19:26
Beitrag # 5 von 7
Beitrag ID: #439400
Bewertung:
(2033 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieber Martin,

dankeschön. So habe ich es nun zum Laufen gebracht. Die Schleife habe sicherheitshalber wieder umgedreht.
Code
if ((app.selection.length > 0) && (app.selection[0].isText))   
{
var myItems = app.selection[0].parentStory.textFrames; /////////<--

for (oneItem = myItems.length-1; oneItem >= 0; oneItem--)
{

if (myItems[oneItem].constructor.name == "TextFrame")
{

myItems[oneItem].parentStory.texts[0].appliedParagraphStyle = "Marginalie";

myItems[oneItem].insertionPoints[0].contents = myStartTag; // Einfügen des Start-Tags

myItems[oneItem].parentStory.texts[0].insertionPoints[-1].contents = myEndTag; // Einfügen des End-Tags

// Verschieben des Inhalts des verankerten Textrahmens
myItems[oneItem].texts[0].move(LocationOptions.before, myItems[oneItem].parent.texts[0].paragraphs[0].insertionPoints[0]);

myItems[oneItem].remove(); // Löschen des verankerten Textrahmens
}
}
}

Die Zeile müßte in Ordnung sein, oder?

Was mir jetzt aufgefallen ist:

Sobald in einer Marginalfläche ein einzelnes Wort steht, das mehr als 16 Buchstaben hat, funktioniert der move nicht mehr.
Kannst Du das bestätigen?

Gruss
Christoph


als Antwort auf: [#439339]
(Dieser Beitrag wurde von cwenet am 16. Apr 2010, 19:28 geändert)

Verankerte Rahmen lösen (WIN CS4 JS)

Martin Fischer
  
Beiträge gesamt: 12684

16. Apr 2010, 21:13
Beitrag # 6 von 7
Beitrag ID: #439411
Bewertung:
(2019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Sobald in einer Marginalfläche ein einzelnes Wort steht, das mehr als 16 Buchstaben hat, funktioniert der move nicht mehr.

Verschiebe nicht nur den Inhalt des Textrahmens (myItems[oneItem].texts[0]),
sondern den Textabschnitt im Textrahmen mit möglichem Überlauf:
myItems[oneItem].parentStory.texts[0]


als Antwort auf: [#439400]

Verankerte Rahmen lösen (WIN CS4 JS)

cwenet
Beiträge gesamt: 1082

17. Apr 2010, 08:14
Beitrag # 7 von 7
Beitrag ID: #439428
Bewertung:
(1989 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen Dank Martin,

so funktioniert es prima. Da wäre ich nie draufgkommen.

Grüße
Christoph


als Antwort auf: [#439411]
X

Aktuell

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
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/