Supportnet Computer
Planet of Tech

Supportnet / Forum / Textverarbeitung

Word Java Schnittstelle





Frage

Hi Mein Problem ist wie folgt. Ich habe unter http://www.must.de/Javactpe.htm eine Schnittstelle gefunden die es erlaubt durch Methoden mit Java programmierung auf Textmarken durch Feldfunktionen zuzugreifen. Das ist eine feine Sache da man einfache Applets gestalten kann mit denen man viele Standertdokumente speisen kann. Das Problem ist,ich weiß nicht wie ich die Klasse WordProcessing.java implementieren kann. Denn wenn ich versuche den Treiber zu starten (WordApi.exe)-der in Pascal geschrieben ist und der wie ich glaube den Datenaustausch erst ermöglicht - wird eine Fehlermeldung ausgeworfen die besagt das ich erst die Klasse WordProcessing implementieren soll. Naja alles ein bisschen viel für mich aber wenn trotzdem jemand lust hat mir was zu sagen dann bitte. Gruß JanMann

Antwort 1 von semi

Das ganze ist eine ziemlich billige Lösung. Die Klasse WordProcessing ist nur als Beispiel gedacht, Du kannst es auch MickeyMouse.java nennen.
(Schau Dir das Ding an, insbesondere die Methoden openWordInput(), output(....) und exec())

Worum es dort anscheinend geht, ist, eine Textdatei (WordInp.txt) zu erzeugen, die dann von dem Programm WordAPI.exe in Word eingetragen wird.

In einem Applet kannst Du es vergessen, da Du keine Zugriffsrechte auf den Rechner des Benutzers bekommst.

Gruß,
Michael

Antwort 2 von janMann

Danke Semi

Also habe ich mich zufrüh gefreut und
Die Schnittstelle ist nicht darauf ausgelegt durch ein Applet oder eine Applikation Textmarken zu editieren.
Würde es sich lohnen sich mit der Gestaltung einer Schnittstelle auseinanderzusetzen oder ist das ein vergebliches Unterfangen ?

Und vieleicht kennst du ja eine Alternative, die die Formatierung von Seriendrucken Grafisch freundlicher und Bedienungsfreundlicher macht.

Gruß JanMann

und nochmal vielen Dank
(Würde mich gerne weiter mit Java beschäftigen aber mir fehlte die Aufgabe, Die Idee der Interaktion der Programme würde mir eine geben)

Antwort 3 von semi

Nicht, dass Du mich falsch verstehst.
Ich habe es mir nur kurz angeschaut, nachdem du Deine Frage gestellt hast.
Es war nur mein erster Eindruck davon.

Für Applets ist das Ding, wegen der Einschränkungen, ungeeignet, für Progamme schon. Allerdings ist es, meiner Meinung nach, keine gute Lösung für eine Word-Schnittstelle. Das Pascal-Programm greift über die COM-Schnittstelle auf Word zu und das Java-Programm muß die Daten über eine Textdatei an WordAPI.exe übergeben.
Die Frage ist, warum nicht gleich eine COM-Anbindung in Java?
Dann braucht man nicht diese WordAPI.exe zu verwenden sonder JNI (Java native Interface).
Es gibt viele solcher Libraries. z.B. Jacob (Java-COM-Bridge)
Dort mußt Du aber die ganze Kommunikation zu Word "von Hand" programmieren.

Wenn Du nach einer Idee suchst, was zu Programmieren, dann programmiere mal einer Art Konfigurator für den Apache-Server. Klartext: Alle Einstellungen unter einer komfortablen Benutzeroberfläche, mit allen möglichen Einstellungen. Das ganze mit einer integrierten Verwaltung für mehrere Konfigurationen (development, test, production) usw.

Und wenn Du fertig bist, dann sag' Bescheid :-) Sowas könnten wirklich viele gebrauchen.

Gruß,
Michael

Antwort 4 von JanMann

Ich glaube das meine Kompetenzen gerade ausreichen sind um ein Applet und eine Applikation zuunterscheiden

Deswegen habe ich ja auch meine Probleme, dieses Beispiel von dem ich erzählte zu starten.

Kompeliere ich WordProcessing.java
(welches keine Main Mehtode hat und deswegen glaube ich nur in einer Browserseite gestartet werden kann)
zur class Datei bin ich zu blöd um das
Applet zu starten (er findet die Methode WordProcessing nicht)

Ich bin jetzt aber völlig verwirrt weil ich mir garnicht mehr sicher bin ob ich mit dieser WordProcessing.class Datei
übrhaupt schon den implementierungsvorgang abgeschlossen habe.

Naja ich glaube ich werde mich wohl noch ein bisschen informieren bis ich dir dann deinen Apache-Server Konfigurator vorstelle.

Gruß JanMAnn

Antwort 5 von semi

Übrigens, so sieht ungefähr die Programmierung mit dem Java-COM-Bridge aus.
Das folgende Beispiel, erstellt ein Worddokument, schreibt dort kurzen Text rein und speichert es im aktuellen Verzeichnis.

import com.jacob.com.*;
import com.jacob.activeX.*;

public class WordTest {

  public static void main(String[] args) {
    ComThread.InitSTA();
    ActiveXComponent word = new ActiveXComponent("Word.Application");
    try {
      // Word unsichtbar im Hintergrund
      word.setProperty("Visible", new Variant(false));
      // Application-Objekt holen
      Object application = word.getProperty("Application").toDispatch();
      // Documents-Objekt holen
      Object documents = word.getProperty("Documents").toDispatch();
      // Neues Dokument erzeugen
      Dispatch.call(documents, "Add");
      // Das neuerzeugte Dokument-Objekt holen
      Object document = Dispatch.get(application,"ActiveDocument").toDispatch();
      // Inhaltsobjekt holen
      Object content = Dispatch.get(document,"Content").toDispatch();
      // Text am Ende des Dokuments einfügen
      Dispatch.call(content, "InsertAfter", new Variant("Dies ist ein Test."));
      // Document im aktuellen Verzeichnis speichern
      Variant filename = new Variant("\""+System.getProperty("user.dir")+"\\WordTest.doc\"");
      Dispatch.call(document, "SaveAs", filename);
      // Document schliessen
      Variant f = new Variant(false);
      Dispatch.call(document, "Close", f);
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      // Word beenden
      word.invoke("Quit", new Variant[] {});
      ComThread.Release();      
    }
  }
}

Compilieren mit:
javac -classpath .;jacob.jar; WordTest.java
Starten mit:
java -classpath .;jacob.jar; WordTest

Gruß,
Michael

Antwort 6 von semi

Das mit dem WordAPI.exe kannst Du wie folgt verwenden.
1) Kopiere alles nach z.B. c:\wordapi
2) Erstelle dort eine Klasse WordAPITest.java mit folgendem Inhalt:

import de.must.util.WordProcessing;

public class WordAPITest {

  public static void main(String argv[]) {

    WordProcessing.createNewDocumentFromTemplate(argv[0]);
    WordProcessing.typeTextAtBookmark("AddressLine1", "O'Reilly & Associated, Inc.");
    WordProcessing.typeTextAtBookmark("AddressLine2", "Mr Miller");
    WordProcessing.typeTextAtBookmark("AddressLine3", "101 Moris Street");
    WordProcessing.typeTextAtBookmark("AddressLine4", "Sebastopol, CA 95472-9902");
    WordProcessing.typeTextAtBookmark("Salutation", "Dear Mr Miller,");
    WordProcessing.exec();

  }

}

3) Compiliere es mit:
javac -d . WordProcessing.java
javac -d . WordAPITest.java

4) Test mit
java WordAPITest c:\wordapi\SampleTemplate.dot

Gruß,
Michael

Antwort 7 von JanMann

Vielen Dank

WordApi hat geklappt !

Bei Jakob bekomme ich aus der Java Datei keine class trotz glatter kompilierung.

Also du hast was gut bei Dir -Ähh -
bei mir, trotdem glaube ich nicht das ich dir helfen könnten, auf deinen Konfigurator musst du dich jedenfalls noch etwas gedulden.

Vielen Vielen Dank an den Meister seiner Kunst
Gruß Jan

Antwort 8 von semi

Um das Beispiel mir Java-COM-Bridge auszuprobieren mußt Du jacobBin_17.zip entpacken.
Zumindest die Dateien jacob.jar und jacob.dll sollten im gleichen Verzeichnis stehen, wie die Datei WordTest.java

Das mit dem Apache-Konfigurator war nur so eine Idee. Es gibt für PHP sowas, für Apache kenne ich kein solches Programm, dafür habe ich schon hunderte von Fragen rund um die Konfiguration von Apache gesehen. Es gibt viele Leute, die sowas gebrauchen könnten.

Viel Erfolg noch!
Michael

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: