[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Zwischenablage per JavaScript auslesen

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

Zwischenablage per JavaScript auslesen

tsone
Beiträge gesamt: 98

20. Sep 2024, 10:12
Beitrag # 1 von 25
Bewertung:
(59832 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Leute,

ich suche eine Möglichkeit in InDesign mit JavaScript die Zwischenablage auszulesen.
Konkret habe ich den Pfad einer Bilddatei in der Zwischenablage und möchte diese (also das Bild) in InDesign platzieren.

Habe bis jetzt nur die Möglichkeit per Apple Script gefunden.
X

Zwischenablage per JavaScript auslesen

WernerPerplies
Beiträge gesamt: 2817

20. Sep 2024, 11:06
Beitrag # 2 von 25
Beitrag ID: #588805
Bewertung:
(59763 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin tsOne,

erzeuge einen Textrahmen und selektiere diesen Rahmen.
speichere diesen Textrahmen:
Code
var /*TextFrame*/tF = app.selection[0]; 

Fülle die Zwischablage
dann:
Code
app.paste() 

lese den Inhalt des Textrakens in eine Variable;
Code
var /*String*/ contentClipBoard = tF.contents 

Lösche anschließend den Inhalt des Textrahmens für den nächsten Durchgang;
Code
tF.texts[0].remove(); 

Es gibt auch noch die folgenden Paste Alternativen:
undefined paste ()

Pastes data from the clipboard into the active document window.

undefined pasteInPlace ()

Pastes data from the clipboard into the active document window at the same position that the data held in its original document.

undefined pasteInto ()

Pastes data from the clipboard into the selected object in the active document window.

undefined pasteWithoutFormatting ()

Pastes data (minus formatting) from the clipboard into the active document window.


als Antwort auf: [#588802]

Zwischenablage per JavaScript auslesen

tsone
Beiträge gesamt: 98

20. Sep 2024, 11:19
Beitrag # 3 von 25
Beitrag ID: #588806
Bewertung:
(59759 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

das mit app.paste() habe ich auch gefunden.
Was ich vergessen hatte zu schreiben, ich habe bereits den Rahmen ausgewählt, in dem das Bild platziert werden soll.
Im Moment mache ich das über promt() und kopiere den Pfad dort rein.


als Antwort auf: [#588805]

Zwischenablage per JavaScript auslesen

WernerPerplies
Beiträge gesamt: 2817

20. Sep 2024, 12:01
Beitrag # 4 von 25
Beitrag ID: #588809
Bewertung:
(59742 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Tsone,

Zitat Im Moment mache ich das über promt() und kopiere den Pfad dort rein.

????

Dann sollte das funtkionieren:

contentClipBoard aus dem obigen Beispiel, dann
Rahmen ausgewählt:
Zitat app.selection[0].place(File(contentClipBoard));



als Antwort auf: [#588806]

Zwischenablage per JavaScript auslesen

tsone
Beiträge gesamt: 98

20. Sep 2024, 13:06
Beitrag # 5 von 25
Beitrag ID: #588812
Bewertung:
(59716 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Im Moment sieht mein Skript so aus:
Code
var Gruppenname = app.selection[0].name; 
var url = prompt("Pfad eingeben",Gruppenname);
app.selection[0].name = url;

var _auswahl = app.selection[0];
var url = url.replace(/%20/g, " ");
if (_auswahl != undefined) {
_auswahl.place(url);
_auswahl.fit(FitOptions.FILL_PROPORTIONALLY);
_auswahl.fit(FitOptions.CENTER_CONTENT);
} else {
var myDoc = app.activeDocument;
var myFrame = myDoc.textFrames.add();
myFrame.place(url);
myFrame.fit (FitOptions.FRAME_TO_CONTENT);
}


Ich hätte dann gerne die Zeile var url = prompt("Pfad eingeben",Gruppenname); so ersetzt, dass "url" direkt aus der Zwischenablage kopiert wird.


als Antwort auf: [#588809]

Zwischenablage per JavaScript auslesen

Gerald Singelmann
  
Beiträge gesamt: 6290

20. Sep 2024, 13:24
Beitrag # 6 von 25
Beitrag ID: #588813
Bewertung:
(59704 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
AppleScript und VisualBasic können die Zwischenablage direkt auslesen.

Man könnte also zwei Zeilen AppleScript schreiben und diese per app.doScript() aufrufen.

Laut websearch wäre das
Code
set clipboardContent to the clipboard 


Es ist zu lange her, dass ich mir die Rückgabe von Werten aus einem doScript angeschaut habe, aber das finden Sie bestimmt mit etwas googeln raus.


als Antwort auf: [#588802]

Zwischenablage per JavaScript auslesen

tsone
Beiträge gesamt: 98

20. Sep 2024, 14:23
Beitrag # 7 von 25
Beitrag ID: #588814
Bewertung:
(59690 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

dann könnte ich das auch gleich mit Apple Script machen.
Ich möchte das aber nativ als JS, damit es sowohl unter macOS als auch unter Windows funktioniert.


als Antwort auf: [#588813]

Zwischenablage per JavaScript auslesen

WernerPerplies
Beiträge gesamt: 2817

20. Sep 2024, 14:36
Beitrag # 8 von 25
Beitrag ID: #588815
Bewertung:
(59686 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Tsone,

Zitat dann könnte ich das auch gleich mit Apple Script machen.
Ich möchte das aber nativ als JS, damit es sowohl unter macOS als auch unter Windows funktioniert.

Das sehe ich genauso.
Die Sache war jetzt doch etwas schwieriger, aber so sollte es funktionieren:
Code
  main(); 

/*Void*/function main(){
try{
var /*Document*/doc = undefined,
/*Rectangle*/r = undefined,
/*TextFrame*/tF = undefined,
/*File*/f = undefined;

if (app.documents.length > 0){
doc = app.documents[0];
if (app.selection.length > 0){
if ((app.selection[0].constructor.name === "Rectangle") || (app.selection[0].constructor.name === "TextFrame")){
r = app.selection[0];
tF = doc.textFrames.add();
tF.texts[0].insertionPoints[-1].select();
app.paste();
file = File(tF.texts[0].parent.contents);
tF.remove();
if (file.exists ){
r.place(file);
}
}
}
}
}
catch (error){
alert("Fehler: " + error.message + "\n" + "in Zeile: " + error.line + "\n");

}
}



als Antwort auf: [#588814]
(Dieser Beitrag wurde von WernerPerplies am 20. Sep 2024, 14:37 geändert)

Zwischenablage per JavaScript auslesen

tsone
Beiträge gesamt: 98

20. Sep 2024, 14:48
Beitrag # 9 von 25
Beitrag ID: #588816
Bewertung:
(59678 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

das funktioniert wirklich super!
Besten Dank dafür!!!


als Antwort auf: [#588815]

Zwischenablage per JavaScript auslesen

Gerald Singelmann
  
Beiträge gesamt: 6290

20. Sep 2024, 18:20
Beitrag # 10 von 25
Beitrag ID: #588817
Bewertung:
(59605 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Für die stillen Mitleser noch die saubere Lösung per doScript, mit der das Dokument nicht geändert werden muss...

Den AppleScript-Teil hatte ich fertig, als ich beim Googlen nach dem VBA Teil fand, dass das jemand längst gelöst hatte.

Code
alert(GetClipboard());   
function GetClipboard(){
var clipboard;
if(File.fs == "Macintosh"){
var script = 'tell application "Finder"\nset clip to the clipboard\nend tell\nreturn clip';
clipboard = app.doScript (script,ScriptLanguage.APPLESCRIPT_LANGUAGE);
} else {
var script = 'Set objHTML = CreateObject("htmlfile")\r'+
'returnValue = objHTML.ParentWindow.ClipboardData.GetData("text")';
clipboard = app.doScript(script,ScriptLanguage.VISUAL_BASIC);
}
return clipboard;
}


Code von Harbs, gefunden von Gregor Fellenz.
https://gist.github.com/...f1424c3a73f34e75b789

Interessante Idee, in VBA über ein HTML-Objekt zu gehen :)


als Antwort auf: [#588802]

Zwischenablage per JavaScript auslesen

Gerald Singelmann
  
Beiträge gesamt: 6290

20. Sep 2024, 18:25
Beitrag # 11 von 25
Beitrag ID: #588818
Bewertung:
(59603 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
PS. Hier auch noch mein AppleScript-Ansatz, der dem Scripting-SDK folgt und die ScriptArgs nimmt. Etwas komplizierter, aber so kann man auch beliebig viele Werte aus einem doScript zurückgeben.

Code
function get_clipboard(){ 
//![Script args from do script.]
if(File.fs == "Windows") {
// Siehe oben
} else {
//Create a string to be run as a AppleScript.
p1 = "tell application \"Adobe InDesign 2021\"\r";
p2 = "tell script args" +"\r";
p3 = "set value name \"clipboard\" value ";
p4 = "(the clipboard as text)\r";
p7 = "end tell" + "\r"
p8 = "end tell" + "\r"
var myAppleScript = p1 + p2 + p3 + p4 + p7 + p8;
app.doScript(myAppleScript, ScriptLanguage.applescriptLanguage);
}
var myScriptArgumentA = app.scriptArgs.getValue("clipboard");
return myScriptArgumentA;
}
alert( get_clipboard() );


Ein Nachteil dieser Lösung ist natürlich, dass der String ""tell application \"Adobe InDesign 2021\"" die aktuelle Versionsnummer von InDesign braucht. Kann man sich natürlich aus app.version herleiten...


als Antwort auf: [#588817]

Zwischenablage per JavaScript auslesen

gfellenz
Beiträge gesamt: 122

21. Sep 2024, 14:14
Beitrag # 12 von 25
Beitrag ID: #588820
Bewertung:
(59374 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Code von Harbs, gefunden von Gregor Fellenz.
https://gist.github.com/...f1424c3a73f34e75b789


Haha. 9 Jahre später lerne ich meinen Code via Hilfdirselbst erneut kennen :)


als Antwort auf: [#588817]

Zwischenablage per JavaScript auslesen

tsone
Beiträge gesamt: 98

22. Sep 2024, 09:11
Beitrag # 13 von 25
Beitrag ID: #588822
Bewertung:
(59125 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald,

vielen Dank für deine Ergänzungen.

Mit den Apple-Script-/VBA-Ansatz kann man natürlich noch viel weiter gehen und mehr automatisieren.

Auf alle Fälle nochmals vielen Dank an alle und an das Forum. Das hat mir in der Vergangenheit schon oft sehr weitergeholfen.


als Antwort auf: [#588818]

Zwischenablage per JavaScript auslesen

Beobachter
Beiträge gesamt: 140

4. Okt 2024, 18:12
Beitrag # 14 von 25
Beitrag ID: #588862
Bewertung:
(55021 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das Script interessiert mich, ich weiss aber nicht, wie ich es in InDesign, CC22, 17.4.1 zum Laufen bringe. Danke für eure Hilfe. Liebe Gruess und es schöns Wucheend, Michel


als Antwort auf: [#588817]

Zwischenablage per JavaScript auslesen

tsone
Beiträge gesamt: 98

7. Nov 2024, 10:41
Beitrag # 15 von 25
Beitrag ID: #589007
Bewertung:
(46528 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Das Script interessiert mich, ich weiss aber nicht, wie ich es in InDesign, CC22, 17.4.1 zum Laufen bringe. Danke für eure Hilfe. Liebe Gruess und es schöns Wucheend, Michel


Hallo Michel,

welches Script meinst du konkret?


als Antwort auf: [#588862]
X