[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt InDesign CS5 XML Bild Import per JavaScript (Windows)

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

InDesign CS5 XML Bild Import per JavaScript (Windows)

JonesRidder
Beiträge gesamt: 85

8. Apr 2011, 09:18
Beitrag # 1 von 10
Bewertung:
(5576 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

weiß jemand, wie man ein bestimmtes XML Element einem bereits vorhandenen Bildrahmen in InDesign Template per Code (JavaScript) zuweisen kann (das Bild soll also nach XML Import direkt im entsprechenden Bildrahmen im Template angezeigt werden?

Name des Bildrahmens im Template (Ebene):
Code
ebBild1 
ebBild2
ebBild3


XML Struktur, welche den Bildpfad enhält:
Code
<dataroot> 
<Artikel>
<BildContainer>
<Bild href="file:///C:/Users/USER/Desktop/Bilder$/IMG_2374.jpg" Sort="1">
<Untertitel>"Erstes Bild"</Untertitel>
</Bild>
<Bild href="file:///C:/Users/USER/Desktop//Bilder$/IMG_2356.jpg" Sort="2">
<Untertitel>"Zweites Bild"</Untertitel>
</Bild>
<Bild href="file:///C:/Users/USER/Desktop//Bilder$/IMG_5756.jpg" Sort="3">
<Untertitel>"Drittes Bild"</Untertitel>
</Bild>
<Bild href="file:///C:/Users/USER/Desktop//Bilder$/IMG_2946.jpg" Sort="4">
<Untertitel>"Zweites Bild"</Untertitel>
</Bild>
</BildContainer>
</Artikel>
</dataroot>


Habe bereits folgendes Probiert:
1. Irgend einem Bild händisch das Attribut verpasst > hat funktioniert (aber ich brauche es halt im Code).
2. Codemäßig, fielen mir folgende zwei Anweisungen auf (beim auslesen der Eigenschaften des Bildrahmens durch ein anderes Script):
Code
Rectangle.associatedXMLElement = ... 
Rectangle.graphics = ...

Habe es aber nicht geschafft, dass das Bild im Rahmen erscheint ...

Gruß
J.R.
X

InDesign CS5 XML Bild Import per JavaScript (Windows)

Dirk Becker
Beiträge gesamt: 183

8. Apr 2011, 22:59
Beitrag # 2 von 10
Beitrag ID: #468799
Bewertung:
(5536 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das Rectangle mit einem existierenden XMLElement verbinden:
myRect.markup(myXE);

Damit ist das Bild aber noch nicht im Kasten ;-)
myRect.placeXML(myXE);

Umgekehrt kann man auch die verschiedenen place...() Methoden am XMLElement verwenden. Details zu den Methoden finden sich im Objectmodel-Viewer des ESTK.

Gruß
Dirk


als Antwort auf: [#468712]

InDesign CS5 XML Bild Import per JavaScript (Windows)

JonesRidder
Beiträge gesamt: 85

11. Apr 2011, 13:48
Beitrag # 3 von 10
Beitrag ID: #468873
Bewertung:
(5480 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Dirk Becker,

es klappt irgendwie nicht ...

Verständnishalber:
"myRect" ist der Name (unter Ebene) des Rahmens in InDesignDokument (in meinem Fall "ebBild1"?
"myXE" ist der Name des XML Elements, indem die Info des Bildpfades steht (In meinem Fall "Bild")?
Oder muss "myRect" noch irgendwie anders definiert werden?

Wie müsste denn dieses ".markup" (die Codezeile) genau aussehen, wenn folgendende Dinge gegeben sind?

Aktueller XML Code Ausschnitt
Code
<dataroot> 
<Artikel>
<Ueberschrift>Das ist eien Überschrift</Ueberschrift>
...
<BildContainer>
<Bild href="file:///C:/Users/USER/Desktop/Bilder$/IMG_2374.jpg" Sort="1"></Bild>
<Untertitel>"Erstes Bild"</Untertitel>
<Bild href="file:///C:/Users/USER/Desktop//Bilder$/IMG_2356.jpg" Sort="2"></Bild>
<Untertitel>"Zweites Bild"</Untertitel>
<Bild href="file:///C:/Users/USER/Desktop//Bilder$/IMG_5756.jpg" Sort="3"></Bild>
<Untertitel>"Drittes Bild"</Untertitel>
<Bild href="file:///C:/Users/USER/Desktop//Bilder$/IMG_2946.jpg" Sort="4"></Bild>
<Untertitel>"Zweites Bild"</Untertitel>
</BildContainer>
</Artikel>
<Artikel>
...
</Artikel>
...
</dataroot>


JavaScript Codeausschnitt:
Code
//Bild platzieren 
//...
for (var i = 0; i < _root.xmlElements.length; i++) {
var _BildContainer = _artikel.xmlElements.itemByName ("BildContainer");
if ( _BildContainer != null ) {
//hier XMLElement "Bild" dem Rahmen "ebBild1" zuweisen (bessergesagt das XML Attribut - Element ist ja leer)
}
_artikel.placeXML (_ebUeberschrift); //ebUeberschrift = erstes Element im letzten Artikel Baum
} //...


Danke für die Hilfe!
Gruß
J.R.


als Antwort auf: [#468799]
(Dieser Beitrag wurde von JonesRidder am 11. Apr 2011, 13:50 geändert)

InDesign CS5 XML Bild Import per JavaScript (Windows)

Dirk Becker
Beiträge gesamt: 183

11. Apr 2011, 14:18
Beitrag # 4 von 10
Beitrag ID: #468875
Bewertung:
(5467 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hier ein Beispiel mit einem neuen Dokument, wo ich den Bild-Rahmen selbst erstelle. Natürlich kann man sich den Rahmen auch aus einer wie auch immer gestalteten Vorlage suchen.

Das href Attribut im XML musste ich anpassen, bei mir funktionierte href="/Users/dirk/Desktop/BildImport/Foto.jpg"

Code
#target InDesign 

function main() {
var doc = app.documents.add();
var rootXE = doc.xmlElements.item(0);
rootXE.importXML(File("~/Desktop/BildImport/data.xml"));
var bildXE = rootXE.evaluateXPathExpression("//Bild")[0];
var page = doc.pages.item(0);
var myRect = page.rectangles.add({geometricBounds: page.bounds });
myRect.placeXML(bildXE);
}

main();



als Antwort auf: [#468873]

InDesign CS5 XML Bild Import per JavaScript (Windows)

JonesRidder
Beiträge gesamt: 85

11. Apr 2011, 15:38
Beitrag # 5 von 10
Beitrag ID: #468879
Bewertung:
(5454 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke für die schnelle Antwort!

1. Was ist jetzt aus ".markup" geworden - überflüssig?

2. Dein Code fügt das Bild einfach auf die Seite ein nicht aber in den dafür vorgesehenen Rahmen :(
Soweit ich sehen kann wird der neue Rahmen für das Bild mit "var myRect = page.rectangles.add({geometricBounds: page.bounds });" angelegt.
Ich brauche aber keinen neuen Rahmen, sondern möchte das Bild in ein vorhandenen Rahmen platzieren. Der Rahmen heißt mit Namen "ebBildLinks1". Habe versucht anstatt "add", "set" zu machen, hat nicht funktioniert. Weißt wie die Zeile dann richtig lauten muss?

Das was händisch so abläuft: ...
XML importieren > XML Element mit Bild "href" Attribut auf die Seite in den entsprechenden Rahmen ziehen, so das das Bild erscheint
soll durch das Skript erledigt werden.
Das ist das Ziel (sollte ich mich unverständlich ausgedrückt haben).

Danke für deine Hilfe bisher.
Gruß
J.R.


als Antwort auf: [#468875]

InDesign CS5 XML Bild Import per JavaScript (Windows)

Dirk Becker
Beiträge gesamt: 183

11. Apr 2011, 18:37
Beitrag # 6 von 10
Beitrag ID: #468902
Bewertung:
(5423 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
markup() entspricht dem manuellen Vorgang den existierenden Rahmen auszuwählen und mit einem Tag zu versehen. Wie gesagt fehlt dann aber noch immer das Bild.

Wie man einen existierenden Rahmen im Dokument wieder findet hatte ich vorausgesetzt. Für diese Navigation im Objektbaum gibt es jede Menge Beispiele ...

In Kürze geht das etwa so:
myRect = page.rectangles.item(0);
oder
myRect = page.rectangles.itemByName("ebBildLinks1");

Inzwischen stellt sich mir aber die Frage, ob das Vorgehen insgesamt angebracht ist. Wenn man die Vorlage (das Dokument) geeignet manuell vorbereitet, sollten die Bilder beim XML Import sofort, ohne weiteres Zutun, an die richtige Stelle kommen. Dazu muss nur die XML Struktur genau passen - was man am besten über einen XML Export vergleicht.

Die Vorgänge mit einzelnem place...() sind eher für komplizierte Aufgabenstellungen, wo man die Vorlage erst je nach Artikel-Typ auf dem Dokument erzeugt oder aus einer Bibliothek abruft. Dann müssen Rahmen und Element auf dem gezeigten Weg explizit miteinander verbunden werden.

Grüße,
Dirk


als Antwort auf: [#468879]

InDesign CS5 XML Bild Import per JavaScript (Windows)

JonesRidder
Beiträge gesamt: 85

12. Apr 2011, 11:00
Beitrag # 7 von 10
Beitrag ID: #468948
Bewertung:
(5393 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
"myRect = page.rectangles.itemByName("ebBildLinks1"); " hat funktioniert, zumindest insoweit, dass das Bild in den entsprechenden Rahmen platziert wurde. Die größe des Bildes wird nicht an den Rahman angepasst. Kann man das regeln, indem man im BildRahmen direkt irgendwelche Optionen ändert (Rahmeneigentschaften oder sowas)?

Zu: "Inzwischen stellt sich mir aber die Frage, ob das Vorgehen insgesamt angebracht ist ..."
Das kann ich nicht beurteilen - ich arbeite erst seit ein paar wenigen Monaten mit InDesign.
Wie sieht denn die Vorlage richtig vorbereitet aus?
Bei mir sind die Rahmen etc. alle schon vorhanden benannt in der Mustervorlage (sowohl für Texte als auch für Bilder).
Für den Import der XML habe ich bisher placeXML benutzt - das hat bei den Texten ganz gut funktioniert (im Zusammenspiel mit Absatzformatoptionen). Die BildDaten wurden auch in die Struktur mit reingeladen, aber hatten soweit ich das sehen konnte, keinen Bezug zum entsprechenden Rahmen. Um diesen Bezug herzustellen, machte ich ja diesen Thread auf.

Gruß
J.R.


als Antwort auf: [#468902]

InDesign CS5 XML Bild Import per JavaScript (Windows)

JonesRidder
Beiträge gesamt: 85

12. Apr 2011, 14:57
Beitrag # 8 von 10
Beitrag ID: #468976
Bewertung:
(5372 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Beitrag vom 12. Apr 2011, 11:00 hat sich erledigt.
Die Bilder werden einwandfrei dank Dirks tatkräftiger Unterstützung in die Rahmen eingefügt - ein herzliches Dankeschön noch einmal.
Ich hätte da aber noch eine letzte Frage: Gibt es eine Möglichkeit, herauszufinden, ob ein Bild hochformat oder querformat ist?

Gruß
J.R.


als Antwort auf: [#468948]

InDesign CS5 XML Bild Import per JavaScript (Windows)

Dirk Becker
Beiträge gesamt: 183

13. Apr 2011, 22:19
Beitrag # 9 von 10
Beitrag ID: #469103
Bewertung:
(5320 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
> Gibt es eine Möglichkeit, herauszufinden, ob ein Bild hochformat oder querformat ist?

Code
var doc = app.activeDocument; 
var img = doc.pages.item(0).rectangles.item(0).images.item(0);
var bounds = img.geometricBounds;
alert( (bounds[2]-bounds[0])>(bounds[3]-bounds[1]) ? "hoch" : "quer" );


Schönen Feierabend,
Dirk


als Antwort auf: [#468976]

InDesign CS5 XML Bild Import per JavaScript (Windows)

JonesRidder
Beiträge gesamt: 85

21. Apr 2011, 10:36
Beitrag # 10 von 10
Beitrag ID: #469706
Bewertung:
(5152 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke für die Hilfe
(das Problem scheint sich leider erledigt zu haben mitlerweile).

Gruß
J.R.


als Antwort auf: [#469103]
X