[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Interaktives Panel

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

Interaktives Panel

tsone
Beiträge gesamt: 47

10. Jul 2017, 17:45
Beitrag # 1 von 35
Bewertung:
(8544 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Leute,

ich habe in InDesign ein eigenes Panel laufen, bei dem ich mit Buttons verschiedene JSX ausführen kann, die sich auf das geöffnete InDesign-Dokument auswirken.

Jetzt möchte ich aber, dass in dem Panel selber was passiert. Zum Beispiel, dass er mir im Panel den Namen des gerade ausgewählten Objektes anzeigt. Ich weiß, dass ich das auch über die Ebenen-Palette sehen kann - allerdings wird das unübersichtlich, wenn ich dort viele Ebenen habe, die teilweise zugeklappt sind.

Hat da jemand eine Idee?

Danke und Grüße
X

Interaktives Panel

drerol74
Beiträge gesamt: 394

12. Jul 2017, 00:46
Beitrag # 2 von 35
Beitrag ID: #558578
Bewertung:
(8074 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

um welches Panel handelt es sich denn, HTML? Bzw. welche InDesign-Version?

Schöne Grüße
Roland


als Antwort auf: [#558552]

Interaktives Panel

tsone
Beiträge gesamt: 47

12. Jul 2017, 08:15
Beitrag # 3 von 35
Beitrag ID: #558580
Bewertung:
(7891 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Roland,

es handelt sich um InDesign CC 2017 also ein HTML-Panel.


als Antwort auf: [#558578]

Interaktives Panel

drerol74
Beiträge gesamt: 394

12. Jul 2017, 18:42
Beitrag # 4 von 35
Beitrag ID: #558599
Bewertung:
(7627 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
So sollte es gehen. Hier wrid als Beispiel nach Klick auf den Button der Constructor der aktuellen InDesign-Auswahl angezeigt:

JavaScript:

Code
(function () { 

'use strict';

var csInterface = new CSInterface();
var output = document.getElementById("constructor-name");

document.getElementById('test-button').addEventListener('click', function () {
csInterface.evalScript('__main()');
});

csInterface.addEventListener("custom_event", function(event) {
output.innerHTML = event.data;
});

}());



ExtendScript:

Code
function __main() { 

if(app.documents.length == 0) { return false; }

var _selection = app.selection;
if(!_selection) { return false; }

var _constructorName = _selection[0].constructor.name;

try {
var _externalObjLib = new ExternalObject("lib:\PlugPlugExternalObject");
} catch(_error) {
alert(_error);
}

if(!_externalObjLib) { return false; }

var _csxsEventObj = new CSXSEvent();

_csxsEventObj.type = "custom_event";
_csxsEventObj.data = _constructorName;
_csxsEventObj.dispatch();

return;
} /* END function __main */



index.html:

Code
<!doctype html> 
<html>

<head>
<meta charset="utf-8"/>
<title>Interakives Panel</title>
<link rel="stylesheet" href="css/styles.css"/>
</head>

<body>
<div id="content">
<h1 id="constructor-name">Constructor erscheint hier ...</h1>
<button id="test-button">Hier klicken</button>
</div>

<script src="js/libs/CSInterface.js"></script>
<script src="js/main.js"></script>
</body>
<html>



Die Webseite von Davide Barraca ist dazu sehr zu empfehlen, dort gibt es viele Beispiele zu ähnlichen Sachen. Und nicht zu vergessen sein Buch.

https://www.davidebarranca.com

Schöne Grüße
Roland


als Antwort auf: [#558580]

Interaktives Panel

tsone
Beiträge gesamt: 47

13. Jul 2017, 09:23
Beitrag # 5 von 35
Beitrag ID: #558610
Bewertung:
(7074 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Roland,

kann ich das "JavaScript" mit in die "index.html" packen und das "ExtendScript" in eine JSX?

Meine aktuellen Scripte rufe ich so auf:

index.html
Code
<button id="btn_PNGTODESKTOP72" onClick="onClickButton('PNGTODESKTOP72')">72</button> 


export.jsx:
Code
$._ext_PNGTODESKTOP72={ 
run : function() {
/********** Replace below sample code with your own JSX code **********/
var Dateiname = app.activeDocument.name.split(".")[0];
var Buchstabe_klein = Dateiname.charAt(0).toLowerCase();
var Buchstabe_gross = Dateiname.charAt(0).toUpperCase();
app.pngExportPreferences.transparentBackground = true;
app.pngExportPreferences.exportResolution = 72;
app.pngExportPreferences.pngQuality = PNGQualityEnum.HIGH;
app.activeDocument.exportFile(ExportFormat.PNG_FORMAT, File(new File("~/Desktop/" + Dateiname + ".png")));
/************************************************************************/
return appName; }, };


Danke und Grüße


als Antwort auf: [#558599]

Interaktives Panel

tsone
Beiträge gesamt: 47

13. Jul 2017, 13:05
Beitrag # 6 von 35
Beitrag ID: #558619
Bewertung:
(6908 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ah, hab mit ein bisschen Basteln was hinbekommen.

Jetzt muss das auch so funktionieren, dass ich nicht extra nen Button klicken muss. Sprich - wenn ich ein Objekt auswähle, soll er im Panel den Objekt-Namen anzeigen.


als Antwort auf: [#558610]

Interaktives Panel

drerol74
Beiträge gesamt: 394

13. Jul 2017, 14:33
Beitrag # 7 von 35
Beitrag ID: #558621
Bewertung:
(6840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: kann ich das "JavaScript" mit in die "index.html" packen


Du kannst den js-Code auch in dei Index-Datei schreiben. Bezüglich Wartung finde ich die Verlinkung und Auslagerung in eine eigene Datei aber praktischer.


Antwort auf: und das "ExtendScript" in eine JSX?


So war es gedacht ;)


Antwort auf: Jetzt muss das auch so funktionieren, dass ich nicht extra nen Button klicken muss. Sprich - wenn ich ein Objekt auswähle, soll er im Panel den Objekt-Namen anzeigen.


Mit dem EventListener »afterSelectionChanged«, meinst du das? Der Button war nur zur Demonstration.

Schöne Grüße
Roland


als Antwort auf: [#558619]

Interaktives Panel

tsone
Beiträge gesamt: 47

13. Jul 2017, 14:36
Beitrag # 8 von 35
Beitrag ID: #558622
Bewertung:
(6837 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hab ein wenig mit afterSelectionChanged rumgespielt.

Über das Panel passiert gar nichts. Über ein externe Skriptdatei bekomme ich auch bei verschiedenen eventListener nur Fehlermeldungen, dass das Objekt nicht mehr verfügbar ist.


als Antwort auf: [#558619]

Interaktives Panel

Dirk Becker
Beiträge gesamt: 163

13. Jul 2017, 20:12
Beitrag # 9 von 35
Beitrag ID: #558632
Bewertung:
(6600 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Fehlermeldungen, dass das Objekt nicht mehr verfügbar ist


Vermutlich fehlt da die targetengine Anweisung.
https://www.google.de/...ndesign+targetengine


als Antwort auf: [#558622]

Interaktives Panel

tsone
Beiträge gesamt: 47

14. Jul 2017, 07:18
Beitrag # 10 von 35
Beitrag ID: #558634
Bewertung:
(6181 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Dirk,

mit
Code
#targetengine "session" 

hat es geklappt. Allerdings bekomme ich beim InDesign öffnen, dass "undefined is not an object" ist.
Vermute mal, dass das kommt, weil noch kein Objekt ausgewählt ist.

Außerdem muss ich erst Rolands Button zweimal im Panel klicken, bis auch der "afterSelectionChanged" funktioniert.

Danach

Aber vielen Dank euch für die Hilfe!!!


als Antwort auf: [#558632]

Interaktives Panel

Uwe Laubender
Beiträge gesamt: 4157

14. Jul 2017, 09:58
Beitrag # 11 von 35
Beitrag ID: #558636
Bewertung:
(6043 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ tsone ] … Allerdings bekomme ich beim InDesign öffnen, dass "undefined is not an object" ist. Vermute mal, dass das kommt, weil noch kein Objekt ausgewählt ist.


Hallo tsone,
was heißt "beim InDesign öffnen" genau?
Du startest InDesign und erwartest, dass die Arbeit mit app.selection funktioniert? Genau das ist aber nicht der Fall solange kein Dokument geöffnet ist.

Lass mal das hier als Startup-Script laufen:

Code
#targetengine uwe-test 

app.addEventListener("afterSelectionChanged", doSomething);

function doSomething(evt)
{

// THIS WILL FAIL AFTER STARTUP OF INDESIGN:
// Do nothing if nothing is selected:
if(app.selection.length == 0){return};

// OPTIONAL:
// Do nothing if text is selected:
if(app.selection[0].hasOwnProperty("baselineShift")){return};

// Final action:
alert(app.selection.length);
};


Und dann ändere das Startup-Script zu dem hier:

Code
#targetengine uwe-test 

app.addEventListener("afterSelectionChanged", doSomething);

function doSomething(evt)
{
// Do nothing if no document is open:
if(app.documents.length == 0){return};

// OPTIONAL:
// Do nothing if nothing is selected:
if(app.selection.length == 0){return};

// OPTIONAL:
// Do nothing if text is selected:
if(app.selection[0].hasOwnProperty("baselineShift")){return};

// Final action:
alert(app.selection.length);
};


Dazwischen natürlich InDesign neustarten.

[b]Warum versuche ich Textauswahlen auszublenden?
Der Listener liefert mit Textauswahlen quasi jeden "Pups". Also zum Beispiel wenn die Einfügemarke im Text bewegt wird. Oder wenn der Anwender Text tippt, dann gilt bei jeder neuen Einfügemarke: "Hallihallo! Die Auswahl hat sich geändert!" Wirklich nach jedem Zeichen! Kann nervig werden. Braucht man jetzt nicht so rigoros umsetzen wie ich das hier mache, aber man sollte darauf gefasst sein, dass jede Menge Meldungen in kurzer Zeit auf einen zukommen können.

Es wäre zu überlegen, ob Du überhaupt mit afterSelectionChanged arbeiten solltest.
Stattdessen könntest Du ein [b]IdleTask der app hinzufügen und dem einen listener für [b]IdleEvent.ON_IDLE mit einer entsprechenden Handler-Funktion mitgeben, die die Auswahl prüft und auswertet. Da könnte man sogar einen Intervall für's Nachschauen einbauen.

Doku hier:
http://jongware.mit.edu/...c_IdleTasks.html#add
http://jongware.mit.edu/...6js/pc_IdleTask.html

Schnipsel da:

Code
var newIdleTask = app.idleTasks.add 
(
{
name : "DoSomethingIfIdleEverySecond" ,
sleep : 1000
}
);

var onIdleListener = newIdleTask.addEventListener( IdleEvent.ON_IDLE , doSomeThing , false);

function doSomeThing(evt)
{
// Your functionality goes here:
if(app.documents.length == 0){return};
if(app.selection.length > 1)
{
// Notify my panel
}

};

*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#558634]

Interaktives Panel

tsone
Beiträge gesamt: 47

14. Jul 2017, 10:33
Beitrag # 12 von 35
Beitrag ID: #558637
Bewertung:
(6017 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

das mit dem IdleTask schaue ich mir mal.

Danke und Grüße
Timo


als Antwort auf: [#558636]

Interaktives Panel

Uwe Laubender
Beiträge gesamt: 4157

14. Jul 2017, 11:16
Beitrag # 13 von 35
Beitrag ID: #558639
Bewertung:
(5987 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Timo,

ergänzend zu dem vorher gesagten:

1. Ich hatte ja nur vermutet, dass Du bei der Aktivierung des Listeners kein Dokument offen hast. Oder den Fall: Der Benutzer schließt alle Dokumente. Dann sollte der Listener ja ohne Fehlermeldung einfach weiterlaufen.
Bis der Benutzer entscheidet das Panel zu schließen.

2. Um eine echte Fehlerbehandlung zu machen, könntest Du mit try-catch arbeiten um den Fehler zu untersuchen.

Falls kein Dokument geöffnet ist, wirft das hier einen Fehler:
Code
app.selection.length 


Welche Fehlernummer?

Code
try 
{
app.selection.length;
}
catch(e)
{
alert(e.number);
};

// 90884


Du könntest darauf reagieren, und den weiteren Code nicht ausführen.
Ob das für alle Situationen reicht? Möglicherweise nicht.

Code
#targetengine uwe-test 

app.addEventListener("afterSelectionChanged", doSomething);

function doSomething(evt)
{
try
{
app.selection.length;
}
catch(e)
{
if(e.number == 90884)
{

// Known error.

// e.message
// "Es sind keine Dokumente geöffnet."

// app.findKeyStrings("Es sind keine Dokumente geöffnet.")
// $ID/NoDocumentOpenError

return
};
else
{
alert( "Error: "+e.number +"\r"+ e.message );
return
};
}
};


Im Falle des Schließens eines Dokuments bekomme ich einen weiteren Fehler geworfen: "Es sind keine Dokumentenfenster geöffnet" mit Fehlernummer 90886.

Den könntest Du dann auch in die Kategorie der "bekannten" Fehler einordnen.
Vielleicht treten ja noch andere auf, die Du behandeln möchtest.

Also: Testen!
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#558637]

Interaktives Panel

Uwe Laubender
Beiträge gesamt: 4157

15. Jul 2017, 09:31
Beitrag # 14 von 35
Beitrag ID: #558650
Bewertung:
(5142 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Kleine Korrektur meiner Formulierung:

"Es sind keine Dokumentenfenster geöffnet" muss heißen:
"Es sind keine Dokumentfenster geöffnet."
$ID/NoWindowOpenError

Dieser Fehler wird auch geworfen, wenn Du beispielsweise mit mehreren Fenstern eines Dokuments arbeitest und eines davon schließt. Ob Textansicht oder Layoutansicht macht keinen Unterschied.

Die Formulierung der Meldung ist ein wenig widersprüchlich. Könnte etwas präziser sein. "Das Fenster der Auswahl ist nicht mehr geöffnet." wäre vielleicht besser…

Experimentiere auch mal mit dem Seitenwerkzeug während der Listener läuft.
Weiss nicht, ob Du auch ausgewählte Seiten in Deinem Panel aufnehmen möchtest.
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#558639]

Interaktives Panel

Uwe Laubender
Beiträge gesamt: 4157

17. Jul 2017, 16:55
Beitrag # 15 von 35
Beitrag ID: #558671
Bewertung:
(4175 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Hallo Uwe,

das mit dem IdleTask schaue ich mir mal.

Danke und Grüße
Timo


Hallo Timo,
hast Du neue Erkenntnisse?

afterSelectionChanged vs IdleTask

Die Hauptunterschiede dürften sein:

1. Mit der IdleTask fragst Du, bzw. kannst Du im Intervall abfragen wie es um die Auswahl bestellt ist. Und da InDesign im Moment der Abfrage "idle" ist, also nichts macht, wird der Anwender auch nicht ausgebremst. So jedenfalls die Theorie.

2. Mit dem afterSelectionChanged eventhandler wirst Du vermutlich stärker filtern müssen, wenn es um Textauswahlen geht. Es steht zu befürchten, dass das auf die Performance gehen könnte. Davon abgesehen: Du kannst den auch an das activeDocument hängen und musst ihn nicht unbedingt an der Application festmachen.

Was bei beiden passieren kann:
Wenn Du mal einen Zähler mitlaufen lässt, wirst Du feststellen, dass der handler mal "durchrutscht". Soll heißen, dass manche events zwar registriert, der Zähler hochgezählt, die Aktion im handler aber nicht ausgeführt wird. Ist mir bei meinen Tests jedenfalls so ergangen.
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#558637]
X
Hier Klicken

Veranstaltungen

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen. pdf-icon Hier eine kleine Anleitung.

Veranstaltungen
26.09.2018

Hochschuloe der Medien, Stuttgart
Mittwoch, 26. Sept. 2018, 19.00 - 21.00 Uhr

Vertrag

Nur auf den ersten Blick scheint dieses Thema exotisch. Aber eine neue EU-Richtlinie und deren Auswirkungen auf deutsche Gesetze werden dieses Thema auch für Publisher interessant machen. Die EU-Richtlinie "2102 zu Barrierefreiheit" besagt folgendes: Ab dem 23. September 2018 müssen alle öffentlichen Stellen ihre neuen (Office- oder PDF-) Dokumente grundsätzlich barrierefrei veröffentlichen. Im Juni wurde der Gesetzentwurf zur Umsetzung dieser Richtlinie im deutschen Bundestag vom "Ausschuss für Arbeit und Soziales" (19/2728) angenommen. Es wird also ernst für "öffentliche Stellen" und damit auch für deren Dienstleister, die mit der Umsetzung beauftragt werden. Die Richtlinie gilt nämlich nicht nur für Bundes- und Landesbehörden, sondern auch für Verbände, die im Allgemeininteresse liegende Aufgaben erfüllen. Das wären somit auch Gerichte, Polizeistellen, Krankenhäuser, Universitäten, Bibliotheken und einige mehr. Weitere Informationen findest Du hier, hier und hier. Wenn also oben genannte Auftraggeber zu Deinen Kunden zählen, solltest Du Dich vorbereiten. Und da es neben Websites auch um alle downloadbaren Dateien geht sind eben auch PDFs zukünftig barrierefrei zu erstellen. Arbeitet man in InDesign, können dort einige Vorbereitungen getroffen werden. Klaas Posselt ist der ausgewiesene Spezialist im deutschsprachigen Raum für alle Fragen rund um das Thema. Deshalb freuen wir uns, dass er uns in einem Vortrag die Grundlagen dazu vermitteln wird. Wir setzen voraus, dass Du den Umgang mit InDesign gewohnt bist, die Gründe und Vorteile von der Nutzung von Formaten kennst und weißt, wie man lange Dokumente „richtig“ aufbaut. Der Vortrag setzt bewusst DANACH ein. Inhalt des Vortrages ist der Hintergrund von „Barrierefreiheit“ und Möglichkeiten und Grenzen innerhalb von InDesign. Es wird erklärt, welche Bedeutung das kostenpflichtige PlugIn MadeToTag hat und warum und für was man es braucht. Ziel ist es den Rahmen aufzuzeigen, in dem sich das Thema „Barrierefreiheit“ in InDesign abspielt. Du weißt hinterher, wo die „Baustellen“ sind, wo Du weitergehende Infos bekommst und welchen Weg Du einschlagen musst. Am nächsten Tag veranstalten wir zwei Bootcamps, die das Thema praktisch vertiefen. "IDUGS Bootcamp #2" und "IDUGS Bootcamp #3" Klaas Posselt ist studierter Dipl.-Ing. für Druck- und Medientechnik und kam über verschiedene Anfragen zum Thema barrierefreie PDF Dokumente. Seit über 10 Jahren arbeitet er in den Bereichen Medientechnik und Publishing zwischen Medienherstellern, Druckermaschinen und digitalen Ausgabekanälen. Er schult, begleitet und unterstützt Kunden bei der Einführung und Optimierung von Publikationsprozessen und auf dem Weg zu neuen digitalen Ausgabekanälen — egal ob E-Books, barrierefreie PDFs oder Webplattformen. Als Chairman des PDF/UA Competence Center der PDF Association beteiligt er sich an der Weiterentwicklung und Verbreitung des Standards PDF/UA für barrierefreie PDF Dokumente. Diese Veranstaltung kommt nur zu Stande durch die freundliche Unterstützung von "Six Offene Systeme GmbH" -- Enterprise-Content-Management-System und Media-Asset-Management-System.

Nein

Organisator: IDUG Stuttgart

Kontaktinformation: Christoph Steffens, E-Mailchristoph.steffens AT gmail DOT com

https://idug47.eventbrite.de

Veranstaltungen
27.09.2018

Screen IT, Uster
Donnerstag, 27. Sept. 2018, 17.30 - 20.00 Uhr

Infoveranstaltung

Das Angebot an Publishing-Software ist gross. Deshalb empfiehlt sich eine externe Beratung durch unabhängige Software-Experten aus der jeweiligen Branche. Nicht immer muss es eine teure Mietlösung sein, die nach Beendigung der Mietdauer einem nicht einmal gehört. Es gibt sehr gute und auch in der Qualität ausreichende Alternativen, ja sogar kostenlose Freeware. Lassen Sie sich an diesem Abend einmal vor Augen führen, was diese Programme können und wie viel sie kosten.

Ja

Organisator: Screen IT und pre2media

Kontaktinformation: Peter Jäger, E-Mailinfo AT pre2media DOT ch

https://www.pre2media.ch/-1/de/infoanlass/