hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Zwischenablage per JavaScript auslesen

 

« « 1 2 » »  


tsone
Beiträge: 98

20. Sep 2024, 10:12

Beitrag #1 von 25
Bewertung:

(60319 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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

WernerPerplies
Beiträge: 2817

20. Sep 2024, 11:06

Beitrag #2 von 25
Beitrag ID: #588805

Bewertung:

(60250 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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.

Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

als Antwort auf: [#588802] Top
 

tsone
Beiträge: 98

20. Sep 2024, 11:19

Beitrag #3 von 25
Beitrag ID: #588806

Bewertung:

(60246 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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

WernerPerplies
Beiträge: 2817

20. Sep 2024, 12:01

Beitrag #4 von 25
Beitrag ID: #588809

Bewertung:

(60229 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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));


Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

als Antwort auf: [#588806] Top
 

tsone
Beiträge: 98

20. Sep 2024, 13:06

Beitrag #5 von 25
Beitrag ID: #588812

Bewertung:

(60203 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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

Gerald Singelmann  M  S
Beiträge: 6290

20. Sep 2024, 13:24

Beitrag #6 von 25
Beitrag ID: #588813

Bewertung:

(60191 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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

tsone
Beiträge: 98

20. Sep 2024, 14:23

Beitrag #7 von 25
Beitrag ID: #588814

Bewertung:

(60177 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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

WernerPerplies
Beiträge: 2817

20. Sep 2024, 14:36

Beitrag #8 von 25
Beitrag ID: #588815

Bewertung:

(60173 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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");

}
}


Einen schönen Tag wünscht

Werner Perplies
Praxisnahe Skript-Lösungen und Skript-Programmierung für Adobe InDesign
Aktuelles (Stand: 14.02.2024)
Kundenstimmen

als Antwort auf: [#588814]

(Dieser Beitrag wurde von WernerPerplies am 20. Sep 2024, 14:37 geändert)
Top
 

tsone
Beiträge: 98

20. Sep 2024, 14:48

Beitrag #9 von 25
Beitrag ID: #588816

Bewertung:

(60165 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


Hallo Werner,

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

als Antwort auf: [#588815] Top
 

Gerald Singelmann  M  S
Beiträge: 6290

20. Sep 2024, 18:20

Beitrag #10 von 25
Beitrag ID: #588817

Bewertung:

(60092 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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

Gerald Singelmann  M  S
Beiträge: 6290

20. Sep 2024, 18:25

Beitrag #11 von 25
Beitrag ID: #588818

Bewertung:

(60090 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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

gfellenz
Beiträge: 122

21. Sep 2024, 14:14

Beitrag #12 von 25
Beitrag ID: #588820

Bewertung:

(59861 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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 :)
--
Grüße aus Köln,
Gregor Fellenz
http://www.indesignblog.com

als Antwort auf: [#588817] Top
 

tsone
Beiträge: 98

22. Sep 2024, 09:11

Beitrag #13 von 25
Beitrag ID: #588822

Bewertung:

(59612 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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

Beobachter S
Beiträge: 140

4. Okt 2024, 18:12

Beitrag #14 von 25
Beitrag ID: #588862

Bewertung:

(55508 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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

tsone
Beiträge: 98

7. Nov 2024, 10:41

Beitrag #15 von 25
Beitrag ID: #589007

Bewertung:

(47015 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Zwischenablage per JavaScript auslesen


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] Top
 
« « 1 2 » »  


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » Zwischenablage per JavaScript auslesen

X


^




Hier Klicken
Hier Klicken