[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:
(3073 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
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: 12685

31. Jan 2012, 09:41
Beitrag # 2 von 6
Beitrag ID: #488798
Bewertung:
(3064 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:
(3006 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: 12685

1. Feb 2012, 10:19
Beitrag # 4 von 6
Beitrag ID: #488868
Bewertung:
(2996 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: 2700

1. Feb 2012, 10:20
Beitrag # 5 von 6
Beitrag ID: #488869
Bewertung:
(2995 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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.


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:
(2953 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
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

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