[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Bilder in Übersatztext ansprechen

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

Bilder in Übersatztext ansprechen

flingeflung
Beiträge gesamt: 40

31. Jan 2012, 09:23
Beitrag # 1 von 6
Bewertung:
(3321 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich importiere XML in ein vorgefertigtes Layout. Darin sind auch Bilder enthalten, die leider z. T. wesentlich größer sind als die verketteten Textrahmen, in die der XML-Strom reinfließt. Das führt dazu, dass ab dem ersten zu großen Bild alles weitere nur noch Übersatztext ist.

Ich versuche nun, per Skript alle Bilder entsprechend zu verkleinern. Leider komme ich an die Übersatz-Bilder nicht heran (Fehlermeldung: "Ungültiges Objekt für diese Anforderung" in Zeile 20, die alert-Meldung). Wenn ich den Textrahmen von Hand vergrößere, so dass das Übersatz-Bild angezeigt wird, taucht die Fehlermeldung nicht auf.

Wie komme ich an die Übersatz-Bilder heran? Hier ist mein Skript (vorerst noch ohne den Code zum Verkleinern):
Code
  1. if (app.documents.length == 0) {
    alert("Kein Dokument geöffnet");
    exit();
    }

    if (app.selection.length > 0) {
    var myDoc = app.documents[0];

    // Markierten Textrahmen abfragen
    switch(app.selection[0].constructor.name){
    case "Paragraph": myTextFrame = app.selection[0].parentTextFrames; break;
    case "TextFrame": myTextFrame =app.selection; break;
    default:
    alert("Bitte einen Textrahmen auswählen.");
    exit();
    }
    if(myTextFrame.length == 1) {
    alleBilder = myTextFrame[0].parentStory.texts[0].allGraphics;

    for (i = 0; i < alleBilder.length; i++) {
    alert(i+"\n"+alleBilder[i].geometricBounds);
    // ab hier dann später der Code zum Verkleinern
    }
    } else {
    alert("Sie dürfen nur einen Textrahmen auswählen.");
    }

    } else {
    alert("Es ist nichts markiert! Bitte einen Textrahmen auswählen.");
    }


Vielen Dank vorab
flingeflung
X

Bilder in Übersatztext ansprechen

Martin Fischer
  
Beiträge gesamt: 12885

31. Jan 2012, 09:41
Beitrag # 2 von 6
Beitrag ID: #488798
Bewertung:
(3312 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Flingeflung,

Bilder im Übersatz haben keine Koordinaten, die ausgewertet und verändert werden könnten.

Lösung 1: Beseitige den Übersatz und sorge damit dafür, dass die geometrischen Objekte wieder 'Koordinaten bekommen'.

Lösung 2: Bilder trotz Übersatz zu verkleinern
1. verschiebe das Bild temporär auf die Montagefläche;
2. passe dort die Größe an und
3. schiebe das verkleinerte Bild wieder an seinen ursprünglichen Ort zurück.

Siehe auch Kein Zugriff auf die Inline-Grafik bei Textüberlauf möglich.


als Antwort auf: [#488796]
(Dieser Beitrag wurde von Martin Fischer am 31. Jan 2012, 09:45 geändert)

Bilder in Übersatztext ansprechen

flingeflung
Beiträge gesamt: 40

1. Feb 2012, 09:57
Beitrag # 3 von 6
Beitrag ID: #488864
Bewertung:
(3254 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

vielen Dank für die Antwort. Ich werde mal den Lösungsansatz probieren, alle Textrahmen temporär "aufzublasen", dann die Größe aller Bilder anzupassen und die Textrahmen wieder zurückzuschrumpfen.

Wie spreche ich dabei alle verknüpften Textrahmen an (vorausgesetzt, ich habe einen der Textrahmen der Haupt-Story markiert)? Ich will vermeiden, dass Bilder auf Titel- und Rückseite von einer Änderung betroffen sind. Das Skript soll nur die Hauptrahmen betreffen, von denen einer vorher angeklickt werden muss.

Viele Grüße
flingeflung


als Antwort auf: [#488798]

Bilder in Übersatztext ansprechen

Martin Fischer
  
Beiträge gesamt: 12885

1. Feb 2012, 10:19
Beitrag # 4 von 6
Beitrag ID: #488868
Bewertung:
(3244 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo flingeflung,

Antwort auf: Wie spreche ich dabei alle verknüpften Textrahmen an (vorausgesetzt, ich habe einen der Textrahmen der Haupt-Story markiert)?


Die Textrahmen, durch die ein Textabschnitt läuft, sind die textContainers (Array, nicht collection).

Gegeben ein ausgewählter Textrahmen tf:

tf.parentStory.textContainers[0],
tf.parentStory.textContainers[1],
...
tf.parentStory.textContainers[tf.parentStory.textContainers.length -1]



als Antwort auf: [#488864]

Bilder in Übersatztext ansprechen

WernerPerplies
Beiträge gesamt: 2817

1. Feb 2012, 10:20
Beitrag # 5 von 6
Beitrag ID: #488869
Bewertung:
(3243 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo flingeflung ,

Zitat Wie spreche ich dabei alle verknüpften Textrahmen an

Code
  1. main();

    function main()
    {
    var textFrame = app.selection;
    while (textFrame.nextTextFrame === undefined)
    {
    var textFrame = textFrame.nextTextFrame;
    }
    }


sollte den Job erledigen.


als Antwort auf: [#488864]

Bilder in Übersatztext ansprechen

flingeflung
Beiträge gesamt: 40

1. Feb 2012, 13:26
Beitrag # 6 von 6
Beitrag ID: #488885
Bewertung:
(3201 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo nochmal,

Dank Eurer Hilfe konnte ich endlich ein funktionierendes Skript erstellen. Vielen Dank!!!
Falls noch jemand was Ähnliches braucht, stelle ich es mal hier rein:

Code
  1. if (app.documents.length == 0) {
    alert("Kein Dokument geöffnet");
    exit();
    }

    if (app.selection.length > 0) {
    var myDoc = app.documents[0];

    // Markierten Textrahmen abfragen
    switch(app.selection[0].constructor.name){
    case "TextFrame": myTextFrame =app.selection[0]; break;
    default:
    alert("Bitte einen Textrahmen auswählen.");
    exit();
    }
    myStory = myTextFrame.parentStory;
    anzTF = myStory.textContainers.length;
    // Arrays, um die ursprünglichen Koordinaten der Textrahmen zwischenzuspeichern (hier ginge auch ein 2D-Array)
    var t = new Array(); var l = new Array(); var b = new Array(); var r = new Array();
    // Alle verknüpften Textrahmen vergrößern
    for(i = 0; i < anzTF; i++) {
    myGeoBounds = myStory.textContainers[i].geometricBounds;
    t[i] = myGeoBounds[0];
    l[i] = myGeoBounds[1];
    b[i] = myGeoBounds[2];
    r[i] = myGeoBounds[3];
    breite = r[i] - l[i];
    hoehe = b[i] - t[i];
    //alert("i: "+i+"\nTop: "+t[i]+"\nLeft: "+l[i]+"\nBottom: "+b[i]+"\nRight: "+r[i]+"\nBreite "+breite+"\nHöhe "+hoehe);
    breite_neu = l[i] + breite * 4;
    hoehe_neu = t[i] + hoehe * 4;
    myStory.textContainers[i].geometricBounds = [t[i], l[i], breite_neu, hoehe_neu];
    }

    // Nun alle Bilder verkleinern
    maxBreite = 120;
    alleBilder = myStory.texts[0].allGraphics;

    for (i = 0; i < alleBilder.length; i++) {
    myGeoBounds = alleBilder[i].geometricBounds;
    tt = myGeoBounds[0];
    ll = myGeoBounds[1];
    bb = myGeoBounds[2];
    rr = myGeoBounds[3];
    breite = rr - ll;
    hoehe = bb - tt;
    neueHoehe = maxBreite / breite * hoehe;
    alleBilder[i].geometricBounds = [tt, ll, tt+neueHoehe, ll + maxBreite];
    alleBilder[i].fit(FitOptions.frameToContent);
    }

    // Rahmen wieder verkleinern
    for(i = 0; i < anzTF; i++) {
    myStory.textContainers[i].geometricBounds = [t[i], l[i], b[i], r[i]];
    }

    } else {
    alert("Es ist nichts markiert! Bitte einen Textrahmen auswählen.");
    }


Viele Grüße
flingeflung


als Antwort auf: [#488868]
X