[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste

Rahmenpositionierung mit/trotz Objektformat

Kai Rübsamen
Beiträge gesamt: 4684

27. Jul 2016, 23:03
Bewertung:

gelesen: 6083

Beitrag als Lesezeichen
Antwort auf: // wenn nur 2 Absätze markiert werden, kommt beim Erstellen des zweiten Rahmens der Fehler "Objekt ist ungültig" (!?)

Glaub ich nicht! Wenn nur zwei Absätze ausgewählt werden, kommt der alert.
Du solltest allerdings auch abfangen, wenn nichts ausgewählt ist.

Antwort auf: // ein weiteres Problem ist, wenn ich die Webadresse im 2. Absatz habe und in diesem Absatz auch den 2. Rahmen erstelle, kann ich den Text nicht verschieben, weil ich ihn dann an die selbe Stelle verschieben würde (!?)

Wenn das Skript nur läuft, wenn drei Absätze ausgewählt sind, stellt sich diese Frage nicht. Das mit dem Verschieben ginge schon, aber zunächst muss die Auswahl geklärt werden. >> Du könntest prüfen, ob ein Text mit www im zweiten oder dritten Absatz steht und dann reagieren.

Ansonsten:
Dein Objektformat 2 erhält eine Abweichung, wenn du das Absatzformat nachträglich zuweist. Ich würde das Absatzformat im Objektformat hinterlegen und dann den Text nicht verschieben, sondern nur den Inhalt einfügen.

Bei der Verankerung bin ich mir nicht ganz sicher, ob ich das richtig verstanden habe. Aber bei mir funktioniert folgendes:

Code
if (app.selection[0].paragraphs.length == 3) { 
var mySelection = app.selection[0];
}
else {
alert("Achtung:\rBitte 3 Absätze markieren!\nDer dritte enthält die Webadresse.");
exit();
}

var myDoc = app.activeDocument;

var myBB = 50; // Festlegen der Bildbreite
var myFrame1 = mySelection.paragraphs[0].textFrames.add({geometricBounds: [0 , 0, 100, myBB]});
myFrame1.appliedObjectStyle = myDoc.objectStyles.itemByName("OF1"); // Zuweisung des Objektstils
var myFrame2 = mySelection.paragraphs[1].textFrames.add({geometricBounds: [0, 0, 20, myBB]});
myFrame2.appliedObjectStyle = myDoc.objectStyles.itemByName("OF2"); // Zuweisung des Objektstils

// Abfrage Bild, das in den 1. Rahmen soll
var myFigure = File.openDialog("Bild wählen");
// Bild in Bildrahmen setzen, proportional füllen (max. myBB) und Rahmen an Inhalt anpassen (i.e. die Höhe anpassen)
myFrame1.place(myFigure);
myFrame1.fit(FitOptions.PROPORTIONALLY);
myFrame1.fit(FitOptions.FRAME_TO_CONTENT);

// der Inhalt des 3. Absatzes …
var para3contents = mySelection.paragraphs[2].characters.itemByRange(0,-2).contents[0];
// … wird in den Rahmen eingefügt
myFrame2.insertionPoints[0].contents = para3contents;
// und wieder Rahmen an Inhalt anpassen, weil der Text auch zweizeilig sein kann
var tfGB = myFrame2.geometricBounds;
// den Rahmen vergrößern …
tfGB[2] = tfGB[2] + 20;
myFrame2.geometricBounds = tfGB;
// … und wieder an den Text anpassen
fitFrame(myFrame2);
// den 3. Absatz löschen
mySelection.paragraphs[2].remove();

// Werte beider Rahmen in Variable bringen
var myR1 = myFrame1.geometricBounds;
var myR2 = myFrame2.geometricBounds;

var myY2NR2 = myR1[2] - myR2[0];
myFrame2.anchoredObjectSettings.anchorYoffset = myY2NR2;


function fitFrame(aFrame) {
var lastBaseLine = aFrame.lines[-1].baseline;
var b = aFrame.geometricBounds;
aFrame.geometricBounds = [b[0], b[1], lastBaseLine, b[3]];
}


(Dieser Beitrag wurde von Kai Rübsamen am 27. Jul 2016, 23:03 geändert)
Änderungsverlauf:
Beitrag geändert von Kai Rübsamen (Veteran) am 27. Jul 2016, 23:03