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
(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)
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
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
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.
Compilieren mit:
javac -classpath .;jacob.jar; WordTest.java
Starten mit:
java -classpath .;jacob.jar; WordTest
Gruß,
Michael
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:
3) Compiliere es mit:
javac -d . WordProcessing.java
javac -d . WordAPITest.java
4) Test mit
java WordAPITest c:\wordapi\SampleTemplate.dot
Gruß,
Michael
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
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
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

