Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » AppleScript mit place Image on rectangle

AppleScript mit place Image on rectangle

marka17
Beiträge gesamt: 47

13. Jun 2017, 17:03
Bewertung:

gelesen: 9096

Beitrag als Lesezeichen
Hallo,

ich habe ein bestehendes Applescript, das ehemals für Indesign CS5.5 genutzt wurde und für CS6 nicht mehr funktioniert.

Es liest eine Inputdatei mit den Pfadnamen von verschiedenen PDF-Datein, um diese in einem ID-Dokument mit vorgefertigen Musterseiten in bestehende Bildrahmen zu platzieren. Die Inputdatei sieht so aus:

Musterseite:01-210x297@1
SSD:Users:prepress:Desktop:platzhalter.pdf
Schwarz@


Bisher hat das mit

Code
tell rectangle bildboxname 
place bildboxpfad
end tell


funktioniert.

Jetzt kommt an dieser Stelle folgende Fehlermeldung:

error "„Adobe InDesign CS6“ hat einen Fehler erhalten: \"SSD:Users:test:Desktop:platzhalter.pdf\" versteht die Nachricht „place“ nicht." number -1708 from "SSD:Users:test:Desktop:platzhalter.pdf"

wenn ich den code wie folgt ändere:

Code
tell rectangle bildboxname	 
place (bildboxpfad) as alias
end tell


gibt es den Fehler:

error "„Adobe InDesign CS6“ hat einen Fehler erhalten: „alias \"SSD:Users:test:Desktop:platzhalter.pdf\"“ kann nicht gelesen werden." number -1728 from alias "SSD:Users:test:Desktop:platzhalter.pdf"

Der Pfad stimmt und die Datei ist da auch vorhanden.

Wenn ich kein rectangle aus der Musterseite nehme, sondern mit dem Skript ein neues setzte klappt das Platzieren:

Code
set myRectangle to make rectangle with properties {geometric bounds:{-3, -3, 300, 210}} 
set myPlacedPDF1 to place bildboxpfad as alias on myRectangle



Das ganze Skript ist über 200 Zeilen lang. Wenn jemand helfen könnte wäre das toll. Das ganze Skript gibt es hier: http://guidestar.de/IDSkript.txt

Der Bildplatzierungsteil spielt sich bei Zeile 217 ab.

Ich blick's nicht mehr.

Danke und viele Grüße

Mark

AppleScript mit place Image on rectangle

TMA
Beiträge gesamt: 399

14. Jun 2017, 07:44
Bewertung:

gelesen: 9059

Beitrag als Lesezeichen
Hallo Mark,
ab CS6 mache ich das immer so und funktioniert auch:
Code
place file (theFile as string) 


Probiere das mal bitte aus:
Code
set myPlacedPDF1 to place file (bildboxpfad as string) on myRectangle 


Gruß,
TMA

AppleScript mit place Image on rectangle

marka17
Beiträge gesamt: 47

14. Jun 2017, 08:55
Bewertung:

gelesen: 9046

Beitrag als Lesezeichen
Hallo TMA

ich hab's mal geändert auf

Code
tell rectangle bildboxname 
place file (bildboxpfad as string)


Leider funktioniert es nicht. Die Fehlermeldung hat sich ein klein wenig geändert auf:

error "„Adobe InDesign CS6“ hat einen Fehler erhalten: „file \"SSD:Users:test:Desktop:platzhalter.pdf\" of rectangle \"B01\" of page id 10713 of spread id 10706 of document id 1“ kann nicht gelesen werden." number -1728 from file "SSD:Users:test:Desktop:platzhalter.pdf" of rectangle "B01" of page id 10713 of spread id 10706 of document id 1

Zumindest scheint jetzt der Verweis auf den bestehenden Rahmen zu funktionieren. Aber eigentlich ist doch die Pfadangabe mit Doppelpunkten ein alias-Format. Kann das dann funktionieren?


Und
Code
set myPlacedPDF1 to place file (bildboxpfad as string) on bildboxname 


führt wieder zu:

„Adobe InDesign CS6“ hat einen Fehler erhalten: file "SSD:Users:test:Desktop:platzhalter.pdf" of page id 10789 of spread id 10782 of document id 2 versteht die Nachricht „place“ nicht.
Grüße

Mark

(Dieser Beitrag wurde von marka17 am 14. Jun 2017, 09:02 geändert)

AppleScript mit place Image on rectangle

TMA
Beiträge gesamt: 399

14. Jun 2017, 09:29
Bewertung:

gelesen: 9037

Beitrag als Lesezeichen
So wie es scheint, hast du nicht die Reference zum Rahmenobjekt.

Erstelle mal bitte ein neues InDesign Dokument mit EINEM Rahmen und führe folgendes Script mal aus. Dateipfad musst du natürlich noch anpassen.

Code
set fileToPlace to alias "Macintosh HD:Users:tma:Desktop:test.jpg" 

tell application id "com.adobe.InDesign"
tell front document
place file (fileToPlace as string) on rectangle 1
end tell
end tell


Das sollte bei dir auch funktionieren.

Gruß,
TMA

AppleScript mit place Image on rectangle

marka17
Beiträge gesamt: 47

14. Jun 2017, 10:16
Bewertung:

gelesen: 9024

Beitrag als Lesezeichen
Ja, das funktioniert bei mir auch. Ich schrieb ja am Anfang schon:

Zitat Wenn ich kein rectangle aus der Musterseite nehme, sondern mit dem Skript ein neues setzte klappt das Platzieren


Aber wenn die Referenz zum Rahmenobjekt fehlt, warum bekomme ich dann

error "„Adobe InDesign CS6“ hat einen Fehler erhalten: „file \"SSD:Users:test:Desktop:platzhalter.pdf\" of rectangle \"B01\" of page id 10713 of spread id 10706 of document id 1“ kann nicht gelesen werden."

das er das file nicht lesen kann?

Der Labelname des Rahmens B01 der in der Fehlermeldung angegeben wird, stimmt mit dem Label für den Rahmen auf der Musterseite des ID-Dokumentes überein. Hm..

AppleScript mit place Image on rectangle

TMA
Beiträge gesamt: 399

14. Jun 2017, 10:39
Bewertung:

gelesen: 9017

Beitrag als Lesezeichen
Kann es evtl sein das der deinen Rahmen anhand des Namens nicht kennt bzw zuordnen kann?

Was passiert denn wenn du den Rahmen einfach mal selektierst?

Code
select rectangle \"B01\" of page id 10713 of spread id 10706 of document id 1 


Danach das Script einfach mal abbrechen lassen mit:
error code -128
falls es nicht vorher schon abbricht.

Soweit ich weiß bekommen Rahmen auch eine neue ID wenn sie von der Musterseite überschrieben werden (override).

Du kannst auch den Boxen ein Scriptetikett geben (label), auch zu finden in der Scriptpalette wenn es über den Namen nicht funktioniert.

Dann kann man sich z.B. so die Objekte holen:
Code
select (every page item of spread 1 whose label = "deinString") 


Evtl hilft dir das weiter.

Gruß,
TMA

AppleScript mit place Image on rectangle

Dirk Becker
Beiträge gesamt: 193

20. Jun 2017, 23:16
Bewertung:

gelesen: 8844

Beitrag als Lesezeichen
Hi Mark,

probier mal das leicht überarbeitete Script aus:

Code
on run 
tell application "Finder"
set todoFile to a reference to file "todo.txt" of folder "todo" of desktop
set dirk to exists todoFile
if not dirk then
set todoFile to choose file with prompt "Wählen Sie eine Steuerdatei aus:"
end if

set todoAccess to open for access (todoFile as alias)
set todoText to read todoAccess as «class utf8»
close access todoAccess

set AppleScript's text item delimiters to "Musterseite:"
set todoItems to rest of text items of todoText

tell application id "com.adobe.indesign"
if not (exists active document) then
display dialog "Bitte öffnen Sie eine enstprechende Musterseite" buttons {"Ende"}
return
end if
tell active document
repeat with todoItem in todoItems
set AppleScript's text item delimiters to ASCII character 10
set zeilen to text items of todoItem
set zeile1 to item 1 of zeilen
set zeilen to rest of zeilen

set AppleScript's text item delimiters to "@"
set Musterseite to first text item of zeile1
set Seitenzahl to second text item of zeile1

set masterSpread to master spread Musterseite
set newPage to make page at end with properties {applied master:masterSpread}
tell newPage
set n to index of newPage
set pageItems to override page items of page n of masterSpread destination page newPage
repeat with pageItem in pageItems
if name of pageItem is "" then set name of pageItem to label of pageItem
end repeat

if exists text frame "Seitenzahl" then
set contents of text frame "Seitenzahl" to Seitenzahl
end if

set n to 1
repeat while (count zeilen) > 2
set pfad to item 1 of zeilen
set zeile2 to item 2 of zeilen
set zeilen to rest of rest of zeilen

set AppleScript's text item delimiters to "@"
set farbe to first text item of zeile2
set inhalt to second text item of zeile2

set nn to n
if n < 10 then set nn to "0" & n
set Bnn to "B" & nn
set Tnn to "T" & nn

try
tell rectangle Bnn to place (pfad as alias)
end try
try
tell text frame Tnn
set contents to inhalt
set fill color to farbe
end tell
end try
set n to n + 1
end repeat
end tell -- page
end repeat -- pages
if not dirk then
delete page 1
display dialog ("Satzvorgang abgeschlossen!") buttons {"OK"}
end if
end tell -- document
end tell -- InDesign
end tell
set AppleScript's text item delimiters to {}
end run

AppleScript mit place Image on rectangle

marka17
Beiträge gesamt: 47

21. Jun 2017, 12:10
Bewertung:

gelesen: 8813

Beitrag als Lesezeichen
Hi Dirk,


wow, vielen Dank. Das funktioniert. Jetzt muß ich das mal analysieren und versuchen zu verstehen.

Viele Grüße

Mark

AppleScript mit place Image on rectangle

marka17
Beiträge gesamt: 47

21. Jun 2017, 12:47
Bewertung:

gelesen: 8809

Beitrag als Lesezeichen
Hi Dirk,

noch so als Nachtrag: in Deinem Satz "probier mal das leicht überarbeitete Script aus:" hätte das leicht durchaus auch in Anführungszeichen gepaßt :-)

Nochmal vielen Dank

AppleScript mit place Image on rectangle

Dirk Becker
Beiträge gesamt: 193

22. Jun 2017, 11:05
Bewertung:

gelesen: 8754

Beitrag als Lesezeichen
Moin,

Ihr wart ja schon ziemlich weit gekommen. Das verbleibende Problem war, dass damals von Adobe name und label auseinanderdividiert wurden und die Adressierung per Name nicht mehr wie gewohnt funktionierte - hing auch damit zusammen dass die Ebenenpalette mehr anzeigt und jetzt für die Namen zuständig ist. Das habe ich in der kleinen Schleife nach dem Kopieren der Master-Items gelöst, wo der Name gesetzt wird wenn leer. Also nicht wundern wenn Namensänderungen im Label ab jetzt nichts bewirken, das muss in der Ebenenpalette gemacht werden!

Der Rest war nur etwas aufräumen, ich hatte Probleme das gewachsene Script zu verstehen. Hoffentlich übernimmt es auch bei längeren Listen alle Bilder pro Seite, ich hatte das nur begrenzt getestet. Ggf mal mit dem ">2" probieren.

Grüße,
Dirk