hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Bilder in Übersatztext ansprechen

 



flingeflung
Beiträge: 36

31. Jan 2012, 09:23

Beitrag #1 von 6
Bewertung:

(313 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Bilder in Übersatztext ansprechen


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
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
Top

Martin Fischer  M  p
Beiträge: 9687

31. Jan 2012, 09:41

Beitrag #2 von 6
Beitrag ID: #488798

Bewertung:

(304 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Bilder in Übersatztext ansprechen


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.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#488796]

(Dieser Beitrag wurde von Martin Fischer am 31. Jan 2012, 09:45 geändert)
Top

flingeflung
Beiträge: 36

1. Feb 2012, 09:57

Beitrag #3 von 6
Beitrag ID: #488864

Bewertung:

(246 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Bilder in Übersatztext ansprechen


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] Top

Martin Fischer  M  p
Beiträge: 9687

1. Feb 2012, 10:19

Beitrag #4 von 6
Beitrag ID: #488868

Bewertung:

(236 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Bilder in Übersatztext ansprechen


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]



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#488864] Top

WernerPerplies
Beiträge: 1034

1. Feb 2012, 10:20

Beitrag #5 von 6
Beitrag ID: #488869

Bewertung:

(235 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Bilder in Übersatztext ansprechen


Hallo flingeflung ,

Zitat Wie spreche ich dabei alle verknüpften Textrahmen an

Code
main(); 

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


sollte den Job erledigen.


Einen schönen Tag wünscht

Werner Perplies
http://www.weepee.de
12 Anwenderskripte für InDesign
schon gesehen? Wps HyperlinkInspector
Werkzeuge und Infos für die Skriptprogrammierung, schon gesehen?
WpsProfilerClass

als Antwort auf: [#488864] Top

flingeflung
Beiträge: 36

1. Feb 2012, 13:26

Beitrag #6 von 6
Beitrag ID: #488885

Bewertung:

(193 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Bilder in Übersatztext ansprechen


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
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] Top


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Bilder in Übersatztext ansprechen


^