[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Kastentext per Script in den Lauftext verschieben

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

Kastentext per Script in den Lauftext verschieben

allora
Beiträge gesamt: 47

18. Jul 2012, 12:00
Beitrag # 1 von 25
Bewertung:
(9317 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Ich muss für die Neuauflage eines Buches eine Wordvorlage (mit den entsprechenden Formatvorlagen) der vorangegangenen Auflage zur Verfügung stellen, will heißen aus dem Indesign alles ins Word kopieren. Das klappt mit einiger Nachbearbeitung halbwegs gut. Allerdings kommen auch gruppierte Kästen vor (verankert und mit eigenem Objektformat). Diese werden beim Kopieren nicht mitgenommen. Ist es möglich, diesen Kastentext per Skript in den Lauftext zu integrieren (mit einer Absatzlinie vor und danach getrennt) und den Kasten zu löschen?

Schönen Gruß
Anita
X

Kastentext per Script in den Lauftext verschieben

Martin Fischer
  
Beiträge gesamt: 12783

18. Jul 2012, 12:49
Beitrag # 2 von 25
Beitrag ID: #498202
Bewertung:
(9284 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

in Text aus verankerten Textrahmen auslesen und im Fließtext einfügen wäre ein Ansatz, wie man es machen könnte.


als Antwort auf: [#498196]

Kastentext per Script in den Lauftext verschieben

allora
Beiträge gesamt: 47

18. Jul 2012, 13:23
Beitrag # 3 von 25
Beitrag ID: #498207
Bewertung:
(9256 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke Martin,
schien vielversprechend, funktioniert aber soo leider bei mir nicht. Da ich mich mit Skripts nicht wirklich auskenne und gerade Mal die Namen (in diesem Fall des Objektstils - oder wäre mehr gefragt gewesen?) abändern kann, weiß ich nicht, wie ich es für meine Bedürfnisse adaptieren müsste.
Hilfreich wäre aber auch eine Lösung, bei der man die Gruppierung aus Kastentitel + Kastenlauftext zu einem einfachen Kasten umwandelt, der dann beim Kopieren ins Word-Dokument wieder mitginge ...

Hier eine Ansicht des Kastentyps: http://www.sendspace.com/file/5htbd9

Vielen Dank
LG
Anita


als Antwort auf: [#498202]

Kastentext per Script in den Lauftext verschieben

Martin Fischer
  
Beiträge gesamt: 12783

18. Jul 2012, 13:32
Beitrag # 4 von 25
Beitrag ID: #498208
Bewertung:
(9251 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

ich sprach von einem Ansatz, nicht von einer fertigen, allgemeinen Lösung.

Ich kann momentan den Aufwand nicht leisten, die konkreten Bedingungen zu erfragen/ermitteln und eine speziell angepasste Version zu liefern.

Das o.g. Skript bearbeitet nur verankerte Textrahmen mit dem zugewiesenen Objektstil 'Marginalie'. Möglicherweise benötigst Du diese Einschränkung nicht.

Code
if (app.selection.length >= 0 && (app.selection[0].hasOwnProperty ('baseline') || app.selection[0].constructor.name == 'TextFrame') )   
{
var tf = app.selection[0].parentStory.textFrames;
for (var i = tf.length-1; i >= 0; i--)
{
// if (tf[i].appliedObjectStyle.name == 'Marginalie') // prüfe zugewiesenen Objektstil
// {

if (tf[i].texts.firstItem().characters.lastItem().contents != '\r') // wenn das letzte Zeichen im verankerten Textrahmen keine Absatzschaltung ist, dann füge am Ende eine ein
tf[i].texts.firstItem().insertionPoints.lastItem().contents = '\r';
tf[i].texts.firstItem().move(LocationOptions.AT_BEGINNING, tf[i].parent.paragraphs.firstItem()); // verschiebe den Inhalt des verankerten Textrahmens (mit der Absatzmarke am Ende) an den Anfang des Absatzes, in dem er steht
tf[i].remove(); // lösche den verankerten Textrahmen.
}
//}
}



als Antwort auf: [#498207]
(Dieser Beitrag wurde von Martin Fischer am 18. Jul 2012, 13:34 geändert)

Kastentext per Script in den Lauftext verschieben

allora
Beiträge gesamt: 47

18. Jul 2012, 13:48
Beitrag # 5 von 25
Beitrag ID: #498209
Bewertung:
(9231 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich weiß, vielen Dank trotzdem. Das Problem scheinen die gruppierten Kästen zu sein. Bei den einfachen funktioniert dein Skript auch bei mir hervorragend.

Schönen Gruß
Anita


als Antwort auf: [#498208]

Kastentext per Script in den Lauftext verschieben

Hans Haesler
  
Beiträge gesamt: 5826

18. Jul 2012, 21:40
Beitrag # 6 von 25
Beitrag ID: #498257
Bewertung:
(9164 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

sende mir doch bitte ein Musterdokument. Mit klaren Angaben, welche Aktionen durchgeführt werden sollen (vorher / nachher).
Dann werde ich versuchen, eine Lösung zu finden.

Besten Dank im voraus.

Gruss, Hans


als Antwort auf: [#498209]
(Dieser Beitrag wurde von Hans Haesler am 18. Jul 2012, 21:40 geändert)

Kastentext per Script in den Lauftext verschieben

Hans Haesler
  
Beiträge gesamt: 5826

25. Jul 2012, 22:07
Beitrag # 7 von 25
Beitrag ID: #498570
Bewertung:
(9059 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

ich bedanke mich für das Muster-Dokument. Weil es nicht eilig war (das aktuelle Buch hattest Du händisch erledigt), habe ich mich erst jetzt mit Deinem Problem befasst.

Und das Script ist noch nicht bereit, denn ich hatte eine Eingebung, wie man den Kasten aus einem Stück anfertigen könnte. :-) Siehe den Anhang "Kasten_einteilig.png".

Ich habe Dir per PM den Downloadlink zu einem InDesign-Dokument gesandt, in welchem die Rahmen greifbar und mit Screenshots der Einstellungen (Absatzlinien, Textrahmenoptionen, Einzüge usw.) umgeben sind.

Frage: Ist es jetzt noch notwendig, eine Scriptlösung zu entwickeln?

Gruss, Hans


als Antwort auf: [#498257]
Anhang:
Kasten_einteilig.png (43.3 KB)

Kastentext per Script in den Lauftext verschieben

allora
Beiträge gesamt: 47

26. Jul 2012, 14:18
Beitrag # 8 von 25
Beitrag ID: #498600
Bewertung:
(9003 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,
danke für deine geniale Idee des einteiligen Kastens! Damit ist das Skript nicht mehr notwendig. (außer es ist dir waaahnsinnig laaangweilig, dann nehm ich's gerne und kann damit die bereits gesetzten Bücher bearbeiten ;-))

LG
Anita


als Antwort auf: [#498570]

Kastentext per Script in den Lauftext verschieben

Hans Haesler
  
Beiträge gesamt: 5826

26. Jul 2012, 16:01
Beitrag # 9 von 25
Beitrag ID: #498604
Bewertung:
(8974 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

bitteschön. Aber "laaangweilig"? Was ist das? ;-)

Ich werde dennoch versuchen, das Script zu schreiben.
Wird nicht einfach sein, weil die Verankerung gelöst werden muss, damit die Gruppierung aufgehoben werden kann.

Gruss, Hans


als Antwort auf: [#498600]

Kastentext per Script in den Lauftext verschieben

Hans Haesler
  
Beiträge gesamt: 5826

27. Jul 2012, 09:03
Beitrag # 10 von 25
Beitrag ID: #498625
Bewertung:
(8914 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Leute,

Kai Rübsamen macht mich darauf aufmerksam, dass er mir kürzlich ein Dokument zugestellt hatte, in welchem derselbe Trick mit der gepunkteten Absatzlinie verwendet wird.

Ich war ihm behilflich beim Erstellen eines Scripts, welches ähnlich wie bei Anitas Problem eine verankerte Gruppe aufheben und den Text in einen der Rahmen kopieren sollte.

Eigentlich hatte ich damals keine Zeit, um mich gründlich damit zu befassen, doch ich versuchte, aus Gefälligkeit, eine Lösung zu finden. Konzentrierte mich aber aufs Lösen aus der Verankerung und das Zusammenführen der Texte.

Und so verpasste ich es, die Konstruktion auf der Arbeitsfläche zu untersuchen, in welcher das Abrunden der Ecken anders gelöst war, als beim verankerten Original (bei welchem ein Rahmen ohne Inhalt verwendet wurde). Das holte ich nun nach (siehe Screenshot "abgerundete_Ecken.png").

Fazit: "Wer hat's erfunden?" – "Der Kai!" :-)

Gruss, Hans


als Antwort auf: [#498604]
Anhang:
abgerundete_Ecken.png (29.2 KB)

Kastentext per Script in den Lauftext verschieben

Kai Rübsamen
Beiträge gesamt: 4684

27. Jul 2012, 10:20
Beitrag # 11 von 25
Beitrag ID: #498631
Bewertung:
(8890 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

ich hab es sicherlich nicht erfunden, Adobe wars ;-) . Von Zeit zu Zeit sieht man solche Lösungen auch auf den Usergroup-Treffen und ist dann erstaunt, dass doch alle ihre Kästchen mühsam mit Gruppen zusammenbauen.

Gerade wenn Factboxen noch einmal export werden sollen (als Word oder EPUB) ist es sehr wichtig, dass alles in einem Kasten passiert.

Während mein Beispiel mit 2 Absatzlinien funktioniert, hatte ich Anitas Beispiel mit einer weiteren Absatzlinie oben am Folgeabsatz gelöst. Im Rahmen eines Objektformats mit angehakter Option "Nächstes Format" sind damit auch oben rund, dann gerade mit zusätzlichem Abschluß durch Strich möglich.


als Antwort auf: [#498625]
(Dieser Beitrag wurde von Kai Rübsamen am 27. Jul 2012, 10:23 geändert)

Kastentext per Script in den Lauftext verschieben

Hans Haesler
  
Beiträge gesamt: 5826

27. Jul 2012, 13:27
Beitrag # 12 von 25
Beitrag ID: #498645
Bewertung:
(8848 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Anita,

und hier ist schon mal eine erste Version, welche den Kasten vereinfacht.

Code
//KastenVereinfachen_501d.js 
//© 27.07.12 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
//DESCRIPTION:Gruppierte, verankerte Rahmen in einfachen Kasten verwandeln

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.", "Achtung");
exit();
}

// alle Rahmen des Dokuments
var allFrames = app.documents[0].allPageItems;
for (var f=(allFrames.length)-1; f>-1; f--) {
// prüfen, ob verankert ...
if (allFrames[f].parent == "[object Character]") {
// ... und ob Gruppe
if (allFrames[f].constructor.name == "Group") {
var curGroup = allFrames[f];
// die Rahmen der Gruppe
var curFrames = curGroup.allPageItems;
// den Text schwarz einfärben, Grundlinienversatz null, Einzug null,
// Abstand danach, Absatzlinie einfügen
curFrames[0].parentStory.paragraphs[0].properties = {fillColor:"Black", baselineShift:0, leftIndent:0};
curFrames[0].parentStory.paragraphs[0].properties = {spaceAfter:"0c3"};
curFrames[0].parentStory.paragraphs[0].properties = {ruleBelow:true, ruleBelowLineWeight:0.5, ruleBelowOffset:"0c3"};
// prüfen, ob ein Return vorhanden
var endChar0 = curFrames[0].parentStory.characters.item(-1).contents;
if (endChar0 != "\r") {
curFrames[0].parentStory.insertionPoints.item(-1).contents = "\r";
}
// den Text verschieben
curFrames[0].parentStory.move(LocationOptions.AT_BEGINNING, curFrames[1].parentStory.insertionPoints.item(0));
// die Position des Ankers speichern
var gPos = curGroup.parent.insertionPoints[0];
// die Verankerung lösen
curGroup.anchoredObjectSettings.anchoredPosition = AnchorPosition.anchored;
curGroup.anchoredObjectSettings.releaseAnchoredObject();
// die Gruppe auflösen
curGroup.ungroup();
// den einen Rahmen entfernen
curFrames[0].remove();
// den verbliebenen Rahmen wieder verankern
app.selection = curFrames[1];
app.cut();
app.selection = gPos;
app.paste();
}
}
}

Und mit dieser Variante wird der Text in den Lauftext veschoben und der Kasten gelöscht:

Code
//KastenTextVerschieben_501d.js 
//© 27.07.12 / Hans Haesler, Châtelard 52, CH-1018 Lausanne
//DESCRIPTION:Den Text der verankerten Gruppe in den Lauftext verschieben

// vorbeugenderweise das Anzeigen von Dialogen aktivieren
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.", "Achtung");
exit();
}

// alle Rahmen des Dokuments
var allFrames = app.documents[0].allPageItems;
for (var f=(allFrames.length)-1; f>-1; f--) {
// prüfen, ob verankert ...
if (allFrames[f].parent == "[object Character]") {
// ... und ob Gruppe
if (allFrames[f].constructor.name == "Group") {
var curGroup = allFrames[f];
// die Rahmen der Gruppe
var curFrames = curGroup.allPageItems;
// den Text schwarz einfärben, Grundlinienversatz null, Einzüge,
// Abstand davor, Abstand danach, Absatzlinien einfügen
curFrames[0].parentStory.paragraphs[0].properties = {fillColor:"Black", baselineShift:0, leftIndent:"0c7", rightIndent:"0c7"};
curFrames[0].parentStory.paragraphs[0].properties = {spaceBefore:"1c0", spaceAfter:"0c8"};
curFrames[0].parentStory.paragraphs[0].properties = {ruleAbove:true, ruleAboveLineWeight:0.5, ruleAboveOffset:"0c10.5"};
curFrames[0].parentStory.paragraphs[0].properties = {ruleBelow:true, ruleBelowLineWeight:0.5, ruleBelowOffset:"0c5"};
// Einzüge, Abstand danach, Absatzlinien einfügen
curFrames[1].parentStory.properties = {leftIndent:"0c7", rightIndent:"0c7"};
curFrames[1].parentStory.paragraphs.item(-1).properties = {spaceAfter:"1c6"};
curFrames[1].parentStory.paragraphs.item(-1).properties = {ruleBelow:true, ruleBelowLineWeight:0.5, ruleBelowOffset:"0c4"};
// prüfen, ob ein Return vorhanden
var endChar0 = curFrames[0].parentStory.characters.item(-1).contents;
if (endChar0 != "\r") {
curFrames[0].parentStory.insertionPoints.item(-1).contents = "\r";
}
var endChar1 = curFrames[1].parentStory.characters.item(-1).contents;
if (endChar1 != "\r") {
curFrames[1].parentStory.insertionPoints.item(-1).contents = "\r";
}
// die Position des Ankers speichern
var gPos = curGroup.parent.insertionPoints[0];
// den Text verschieben
curFrames[0].parentStory.move(LocationOptions.AT_BEGINNING, gPos);
curFrames[1].parentStory.move(LocationOptions.AT_BEGINNING, gPos);
// die Gruppe entfernen
curGroup.remove();
}
}
}

Bei Bedarf kannst Du die Werte der Abstände (davor, danach) anpassen.

Gruss, Hans


als Antwort auf: [#498600]

Kastentext per Script in den Lauftext verschieben

Uwe Laubender
Beiträge gesamt: 5316

27. Jul 2012, 13:56
Beitrag # 13 von 25
Beitrag ID: #498647
Bewertung:
(8838 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Hans!

Wieder etwas dazu gelernt: ich hätte jetzt nach dem "constructor.name" des "parent" gefragt oder auf "typeof" geprüft bei der Zeile:

Code
allFrames[f].parent == "[object Character]" 


Aber das kann man offenbar auch direkter machen. Gibt's da einen bestimmten Grund? Oder benutzt Du das nur der Kürze wegen?

Weiter unten im Code prüfst Du ja zur Abwechslung mal mit "constructor.name".


als Antwort auf: [#498645]

Kastentext per Script in den Lauftext verschieben

Hans Haesler
  
Beiträge gesamt: 5826

27. Jul 2012, 14:08
Beitrag # 14 von 25
Beitrag ID: #498648
Bewertung:
(8828 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

Du kannst auch ...

Code
if (allFrames[f].parent instanceof Character) { 

... benutzen (wie es ein Dave Saunders tut).

Die von mir gewählte Form habe ich durch eine Abfrage des Objekts bekommen und übernommen. Die Kürze (oder Länge) ist mir nicht so wichtig.

Gruss, Hans


als Antwort auf: [#498647]

Kastentext per Script in den Lauftext verschieben

Uwe Laubender
Beiträge gesamt: 5316

27. Jul 2012, 15:18
Beitrag # 15 von 25
Beitrag ID: #498654
Bewertung:
(8790 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Hans!

Richtig. "instanceof" gibt's ja auch noch…

Es gab mal eine "wilde" Diskussion im Adobe Scripting Forum um die Vorzüge von "instanceof" gegenüber "constructor.name".

Endete, glaub' ich, mit unentschieden oder mit:
"Nach Crockford wäre aber das und das geeigneter, weil…"

Aber Genaueres weiss ich nicht mehr.


als Antwort auf: [#498648]
X