# mit Java ein Office 2007 to PDF realisieren



## dor_neue (14. Okt 2008)

Hallo,

ich habe als Prakikant die Aufgabe bekommen einen Office to PDF Konverter zu programmieren.
Soweit nicht schwer. Erste Lösungen mit Python und OpenOffice hat dem Chef nicht gefallen, denn es soll mit Java realisiert werden. Außerdem soll auf OpenOffice verzichtet werden und Office 2007 genutzt werden.
Das sind 2 schwere Einschränkungen.

Ein Ausbilder zeigt dann kurz, dass ein zugriff auf Office mittels COM-Schnittstelle ganz einfach ist und klickte mir in 5 min ein Beispielprogramm in VB.Net zusammen, mit dem er eine Datei öffnen konnte und diese als PDF abspeichern. Dabei nutzt er das kostenlose "Save as PDF"-Plugin von MS.
OK, aber VB.Net ist nicht Java - meine Aufgabe jetzt das in Java umzusetzen.

Nur hab ich keine Ahnung wo ich da anfangen soll.

Zuerst gesucht nach API-Schnittstellen von Office - außer COM bzw. DCOM hab ich noch ActiveX gefunden.
Gefunden hab ich auch POI von Apache.org - aber helfen tut das nicht so richtig.

Ziel soll es sein, es gibt einen Ordner, sobald dort Dateien reinkopiert werden, soll die PDF-Konvertierung stattfinden.

Hat von Euch jemand sowas mit Java und Office2007 realisiert?
Wo seht Ihr Probleme (hab z.B. das hier gefunden: )?
Wie kann ich COM, DCOM oder ActiveX mit Java nutzen? Ist JCOM der richtige Weg?
Wer hat schon Erfahrungen mit solch einer Aufgabe gemacht?


Ich bin Euch für jede hilfe dankbar, da ich bei Java noch nicht so den super Durchstieg hab...



PS: wichtig ist noch, es sollen Word, Excel, Powerpoint und Visio Dateien konvertiert werden können (bis Office2007).


----------



## Gast2 (14. Okt 2008)

Moin,

die eigentlich wichtigste Frage ... auf dem Rechner wo Dein Programm laufen soll - läuft da auch Office? ... das wirst Du benötigen ... wenn nicht kannst Du ganze 5500 Seiten OOXML implementieren - wobei Dir das aber einen Arbeitsplatz sichert für die nächsten Jahre :bae:

Google - Doc2Pdf ... schau mal ob Du was brauchbares findes ... da ist selbst Shareware für 15€ mit bei gewesen ... dann bastelst Du Dir noch einen FileSystemWatcher (Google foltern) für das Verzeichnis und gut ist



> Ein Ausbilder zeigt dann kurz, dass ein zugriff auf Office mittels COM-Schnittstelle ganz einfach ist und klickte mir in 5 min ein Beispielprogramm in VB.Net zusammen, mit dem er eine Datei öffnen konnte und diese als PDF abspeichern. Dabei nutzt er das kostenlose "Save as PDF"-Plugin von MS.


gut er kann mit der Maus klicken ... gibt ihm somit das Recht als Ausbilder zu arbeiten ... .NET rüm sich regelrecht damit mit den Office-Komponenten arbeiten zu können (wen wunderts) ... also war das keine große Leistung - und dann noch ein Plugin verwendet :toll:



> VB.Net ist nicht Java


irgendwo schon ... bei Beiden hast Du das Problem die native API des BS einbinden zu müssen ... das macht Dir aber .NET etwas leichter ... und beide laufen auf allen (gängigen) Betriebsystemen (gut .NET kennt nur _alle_ Windows-_Betriebsysteme_)

hand, mogel


----------



## lhein (14. Okt 2008)

mogel hat gesagt.:
			
		

> (gut .NET kennt nur _alle_ Windows-_Betriebsysteme_)



www.mono-project.com/Main_Page


----------



## dor_neue (14. Okt 2008)

Office2007 ist auf dem Rechner natürlich auch installiert... das hab ich vergessen zu erwähnen.

Die Tools die ich gefunden habe sind größtenteils keine Lösung und der Rest der halbwegs zu gebrauchen wäre, sind ja eh nur Vorbilder.
Wie gesagt, es soll ja auch ein Lerneffekt mit dabei sein und ich soll sowas in Java realisieren.
Ich such ja auch keine fertige Lösung (dazu kommt ja denn eh noch FileSystemWatcher, Log-File schreiben, ...) sondern Ansätze an den ich weiterarbeiten kann.
So z.B. der Name von der API für Office2007 die ich mit Java ansprechen kann...
Das kann doch nicht so schwer sein - komm ich vielleicht besser wenn ich DCOM-Server laufen lassen und auf diesen mit Java zugreife? Denn bei Netzwerkverbindungen ist es ja egal welche Programmiersprache das Signal absendet - oder?
Am liebsten wäre mir sowas wie XML-RPC für Office2007 - aber das gibt es ja leider nicht - oder?



Und Mono ist eine super Sache wenn es darum geht Net auf Linux zu nutzen - is doch aber für die Aufgabe uninteressant - oder hab ich was übersehen?


----------



## Wildcard (14. Okt 2008)

Ich fände OpenOffice + Java zwar sinnvoller, aber theoretisch kannst du natürlich über com/ole mit MS-Word kommunizieren (sofern es denn installiert ist). Für die Benachrichtigung über neue Dateien schau dir JNotify an.


----------



## lhein (14. Okt 2008)

dor_neue hat gesagt.:
			
		

> Und Mono ist eine super Sache wenn es darum geht Net auf Linux zu nutzen - is doch aber für die Aufgabe uninteressant - oder hab ich was übersehen?



Das war auch nicht als Antwort zu Deiner Frage gedacht. Siehe auch wen ich da zitiert habe.


----------



## dor_neue (14. Okt 2008)

Wildcard hat gesagt.:
			
		

> ... aber theoretisch kannst du natürlich über com/ole mit MS-Word kommunizieren



Genau das ist mein problem - dafür brauch ich Hilfe oder ein passendes Schlagwort oder sonst was...

Manchmal sucht man verzweifelt und findet es nicht, weil man nicht die richtigen Schlagwörter benutzt...


----------



## tuxedo (14. Okt 2008)

SWT bietet dir eine Ole Schnittstelle zu Com/ActiveX an. Damit kannst du prinzipiell Office in Java "benutzen". Musst nur die entsprechenden Ole-Schnittstellen von MS Office kennen.

- Alex


----------



## dor_neue (14. Okt 2008)

tuxedo hat gesagt.:
			
		

> SWT bietet dir eine Ole Schnittstelle zu Com/ActiveX an. Damit kannst du prinzipiell Office in Java "benutzen". Musst nur die entsprechenden Ole-Schnittstellen von MS Office kennen.
> 
> - Alex



Wenn Du mit SWT das hier meinst:
http://de.wikipedia.org/wiki/Standard_Widget_Toolkit
dann geht es da ja eher darum ein "Excel" nachzuprogrammieren.
Ich benötige aber eine Anwendung die das ganze ohne GUI als Daemon/Service erledigen kann...
Wenn ich mich verlesen habe, dann sag es mir bitte - ich glaub ich brauch heute wieder nen bisschen länger


----------



## Wildcard (14. Okt 2008)

Funktioniert Office denn überhaupt wie OpenOffice Headless als Batch Konverter?


----------



## DocRandom (14. Okt 2008)

Wildcard hat gesagt.:
			
		

> Funktioniert Office denn überhaupt wie OpenOffice Headless als Batch Konverter?


*NEIN!*
Das geht bei M$ ned!
Zumindest bei den alten Versionen ging´s nicht, wie es bei Office > 2003 ist weiß ich nicht da ich seit geraumer Zeit nur noch mit OO arbeite.

@dor_neue
Die einzige Möglichkeit in der M$-Umgebung auf die Dokumente zu zugreifen, ohne horrende Lizenzgebühren zu bezahlen, bleibt nun mal POI!
Am besten guckst Du Dir mal Opening Microsoft File Formats to Java von O´Reily an!

lg
DocRandom


----------



## tuxedo (14. Okt 2008)

>> dann geht es da ja eher darum ein "Excel" nachzuprogrammieren. 

Totaler quatsch. SWT hat nix mit Excel zu tun. SWT bietet dir native UserInterfaces gemäß Betriebssystem Look'and'Feel. Und im Falle von Windows hast du noch als "extra" die Ole-Schnittstelle für Com/Active-X.

Erst lesen, dann denken, dann tippen

- Alex


----------



## dor_neue (15. Okt 2008)

Mal ne ganz neue Idee,

was ist wenn ich einen Schnittstellen-Konverter programmiere und darüber mit Java die Office-Anwendungen steuern kann?
So könnte man doch z.B. mit C#.Net einen Server realisieren, der z.B. XML-RPC-Requests entgegennimmt und diese Anforderungen auf die COM-Schnittstelle weiterleitet. Der Vorteil wäre, dass die "neue" Schnittstelle aus "allen" Programmiersprachen ansprechbar wäre. Außerdem dürfte die Realisierung ja nicht so extrem komplex werden - oder sehe ich das falsch?
Java dürfte doch keine Probleme mit XML-RPC haben - ansonsten realisiert man eben eine für Java bessere Schnittstelle...


----------



## Wildcard (15. Okt 2008)

Oder du erklärst deinem Chef das OOo tatsächlich die bessere Wahl ist, da es Headless arbeiten kann, Programmiersprachen und Betriebssystem unabhängig ist und auch über Sockets und Webservices gesteuert werden kann.


----------



## dor_neue (15. Okt 2008)

Wildcard hat gesagt.:
			
		

> Oder du erklärst deinem Chef das OOo tatsächlich die bessere Wahl ist, da es Headless arbeiten kann, Programmiersprachen und Betriebssystem unabhängig ist und auch über Sockets und Webservices gesteuert werden kann.



Würde ich gern - aber 0 Chance - es wird Microsoft Office eingesetzt - das ist fest - leider...


----------



## Gast2 (15. Okt 2008)

Moin,



			
				Wildcard hat gesagt.:
			
		

> Oder du erklärst deinem Chef das OOo tatsächlich die bessere Wahl ist, da es Headless arbeiten kann, Programmiersprachen und Betriebssystem unabhängig ist und auch über Sockets und Webservices gesteuert werden kann.



Du kannst keinen Bekehren wenn er schon seinen Gott gefunden hat ... das funktioniert nur bei der Entscheidungsfindung

mal abgesehen davon ... Office-Dokumente sehen unter 2.4 grausam aus nach dem öffnen ... (Bilder verschoben, etc.) ... in wie weit verbessert wurde in 3.0, kann ich nicht sagen



			
				dor_neue hat gesagt.:
			
		

> was ist wenn ich einen Schnittstellen-Konverter programmiere und darüber mit Java die Office-Anwendungen steuern kann?
> So könnte man doch z.B. mit C#.Net einen Server realisieren, der z.B. XML-RPC-Requests entgegennimmt und diese Anforderungen auf die COM-Schnittstelle weiterleitet. Der Vorteil wäre, dass die "neue" Schnittstelle aus "allen" Programmiersprachen ansprechbar wäre. Außerdem dürfte die Realisierung ja nicht so extrem komplex werden - oder sehe ich das falsch?


nein ... eigentlich eine gute Idee ... dann brauchst Du nur mit .NET auf Office zugreifen ... mit Java über RPC auf die Schnittstelle



> Java dürfte doch keine Probleme mit XML-RPC haben - ansonsten realisiert man eben eine für Java bessere Schnittstelle...


wenn nicht definierst Du einfach ein eigenes XML-Protokoll zum Steuern der Schnittstelle

hand, mogel


----------



## tuxedo (15. Okt 2008)

>> So könnte man doch z.B. mit C#.Net einen Server realisieren, der z.B. XML-RPC-Requests entgegennimmt und diese Anforderungen auf die COM-Schnittstelle weiterleitet.

Ich sags nur ungern, aber nimm doch einfach SWT um auf COM zuzugreifen. Dann sparst du dir C# und kannst direct auf Office losgehen.

- Alex


----------

