[Risolto] API - java

Creare una macro - Scrivere uno script - Usare le API
Rispondi
gino62
Messaggi: 81
Iscritto il: giovedì 26 dicembre 2013, 18:39

[Risolto] API - java

Messaggio da gino62 »

Buongiorno, volevo iniziare a capire l'API con java.

Codice: Seleziona tutto

$ java -version
openjdk version "17.0.7" 2023-04-18
OpenJDK Runtime Environment (build 17.0.7+7-Debian-1deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.7+7-Debian-1deb12u1, mixed mode, sharing)
eseguito ./setsdkenv_unix

Codice: Seleziona tutto

./setsdkenv_unix

 ************************************************************************
 *
 * SDK environment is prepared for Linux
 *
 * SDK = /usr/lib/libreoffice/sdk
 * Office = /usr/lib/libreoffice
 * Make = /usr/bin
 * Zip = /usr/bin
 * cat = /usr/bin
 * sed = /usr/bin
 * C++ Compiler = /usr/bin
 * Java = /usr
 * SDK Output directory = /home/gino/libreoffice7.4_sdk
 * Auto deployment = YES
 *
 ************************************************************************
quindi dovrei avere java, JDK, SDK
volevo provare a lanciare

Codice: Seleziona tutto

import com.sun.star.uno.UnoRuntime;
import com.sun.star.frame.XModel;
import com.sun.star.text.XTextDocument;
import com.sun.star.text.XTextRange;
import com.sun.star.text.XText;
import com.sun.star.script.provider.XScriptContext;
  public class LO_HelloWorld {
      public static void printHW(XScriptContext xScriptContext)
      {
          XModel xDocModel = xScriptContext.getDocument();
          // getting the text document object
          XTextDocument xtextdocument = (XTextDocument) UnoRuntime.queryInterface(
              XTextDocument.class, xDocModel);
          XText xText = xtextdocument.getText();
          XTextRange xTextRange = xText.getEnd();
          xTextRange.setString( "Hello World (in Java)" );
      }
  }

Codice: Seleziona tutto

javac -cp java_uno.jar:juh.jar:jurt.jar:ridl.jar:unoil.jar /home/gino/Scaricati/LO_HelloWorld.java
/home/gino/Scaricati/LO_HelloWorld.java:1: error: package com.sun.star.uno does not exist
import com.sun.star.uno.UnoRuntime;
                       ^
/home/gino/Scaricati/LO_HelloWorld.java:2: error: package com.sun.star.frame does not exist
ho provato a dare permessi nei file .jar in /usr/share/java
ho provato a copiare (e dare permessi) .jar nel percorso di LO_HelloWriter
... qualcuno sa trovare dove sbaglio?
grazie
Ultima modifica di charlie il venerdì 21 luglio 2023, 10:26, modificato 3 volte in totale.
Motivazione: Aggiunta ✔ verde.
LibreOffice 3.5.4.2
Debian /.3 wheezy
gino62
Messaggi: 81
Iscritto il: giovedì 26 dicembre 2013, 18:39

Re: API - java

Messaggio da gino62 »

l'errore è dato dai file jar.
le librerie di libreoffice (in linux) si trovano in /usr/share/java

Codice: Seleziona tutto

:/usr/share/java$ ls -l
totale 2268
-rw-r--r-- 1 root root   54303  6 mag 21.25 java-atk-wrapper.jar
-rw-r--r-- 1 root root    2150 11 gen 23.10 java_defaults.mk
-rw-r--r-- 1 root root    5439 22 mag 18.00 java_uno.jar
-rw-r--r-- 1 root root     368 22 mag 18.00 juh-7.4.5.jar
lrwxrwxrwx 1 root root      13 22 mag 18.00 juh.jar -> juh-7.4.5.jar
-rw-r--r-- 1 root root     356 22 mag 18.00 jurt-7.4.5.jar
lrwxrwxrwx 1 root root      14 22 mag 18.00 jurt.jar -> jurt-7.4.5.jar
-rw-r--r-- 1 root root    2593 26 feb 16.20 libintl-0.21.jar
lrwxrwxrwx 1 root root      16 26 feb 16.20 libintl.jar -> libintl-0.21.jar
-rw-r--r-- 1 root root 2222985 22 mag 18.00 libreoffice-7.4.5.jar
lrwxrwxrwx 1 root root      21 22 mag 18.00 libreoffice.jar -> libreoffice-7.4.5.jar
-rw-r--r-- 1 root root     356 22 mag 18.00 ridl-7.4.5.jar
lrwxrwxrwx 1 root root      14 22 mag 18.00 ridl.jar -> ridl-7.4.5.jar
-rw-r--r-- 1 root root     356 22 mag 18.00 unoil-7.4.5.jar
lrwxrwxrwx 1 root root      15 22 mag 18.00 unoil.jar -> unoil-7.4.5.jar
-rw-r--r-- 1 root root    5218 22 mag 18.00 unoloader-7.4.5.jar
lrwxrwxrwx 1 root root      19 22 mag 18.00 unoloader.jar -> unoloader-7.4.5.jar
vediamo che .jar sono link
libreoffice-7.4.5.jar è un file non un link
ho copiato il file nella cartella dove risiede il file .java

Codice: Seleziona tutto

javac -cp libreoffice-7.4.5.jar LO_HelloWorld.java
ora c'è un file "LO_HelloWorld.class" ma:

Codice: Seleziona tutto

java LO_HelloWorld
Errore: impossibile inizializzare la classe principale LO_HelloWorld
Causato da: java.lang.NoClassDefFoundError: com/sun/star/script/provider/XScriptContext
qualcuno sa come procedere? Grazie
LibreOffice 3.5.4.2
Debian /.3 wheezy
gino62
Messaggi: 81
Iscritto il: giovedì 26 dicembre 2013, 18:39

Re: API - java

Messaggio da gino62 »

Ecco come:
Se vogliamo avere script java nelle "macro personali":
In Debian la cartella dove si trovano gli scripts java personali:
Strumenti → Macro → Esegui macro → Macro personali
/home/.config.libreoffice/4/user/Scripts/java
con i comandi

Codice: Seleziona tutto

cd /home/nomeUtente/.config/libreoffice/4/user/Scripts/java/HelloWorld
javac -cp /home/nomeUtente/libreoffice-7.4.5.jar HelloWorld.java
jar cvf Prova_HelloWorld.jar Prova_HelloWorld.class
avremo i nostri file class e jar.
Per vederli nelle macro personali bisognerà creare un file parcel-descriptor.xml

Codice: Seleziona tutto

 <?xml version="1.0" encoding="UTF-8"?>

<parcel language="Java" xmlns:parcel="scripting.dtd">
  <script language="Java">
    <locale lang="en">
      <displayname value="HelloWorld"/>
      <description>
        Prints "Hello World".
      </description>
    </locale>
    <functionname value="HelloWorld.printHW"/>
    <logicalname value="HelloWorld.printHW"/>
    <languagedepprops>
        <prop name="classpath" value="HelloWorld.jar"/>
    </languagedepprops>
  </script>
</parcel> 
... dovrebbe funzionare
buona giornata a tutti
LibreOffice 3.5.4.2
Debian /.3 wheezy
Rispondi