2009-03-09 6 views

Antwort

5

Ja, ich verwende OpenOffice als Dokumentkonvertierungsserver.

Leider ist die Lösung für Ihr Problem, einen Pool von OpenOffice-Prozessen zu erzeugen.

Der commons-pool Zweig von JODConverter (bevor er auf code.google.com verschoben wurde) hat diese Out-of-the-Box für Sie implementiert.

1

Vlad ist korrekt, wenn mehrere Instanzen von OpenOffice auf verschiedenen Ports ausgeführt werden müssen.

Ich möchte nur hinzufügen, dass OpenOffice scheint nicht stabil zu sein. Wir führen 10 Instanzen davon in einer Produktionsumgebung aus und stellen den Code so ein, dass er mit einer anderen Instanz erneut versucht, wenn der erste Versuch fehlschlägt. Wenn einer der OpenOffice-Server abstürzt (oder nicht abstürzt, aber nicht reagiert), ist die Produktion nicht betroffen. Da es ein Problem ist, die Server täglich neu zu starten, konvertieren wir langsam alle unsere Dokumente in JasperReports (Details siehe iReport). Ich bin mir nicht sicher, wie Sie den OpenOffice Server verwenden. Wir verwenden es für die Verschmelzung von Briefen (Ausfüllen von Formularen für Kunden). Wenn Sie Dinge in PDF konvertieren möchten, empfehle ich iText.

2

OpenOffice kann im Headless-Modus verwendet werden, aber es wurde nicht für viele Anfragen in einer stressigen Produktionsumgebung entwickelt.

Openoffice Verwendung in Headless Modus verfügt über mehrere Probleme:

  • Der Prozess könnte die/nicht mehr zur Verfügung.
  • Es gibt mehrere Speicherverlustprobleme.
  • Eröffnung mehr Openoffice „Arbeiter“ skaliert nicht wie erwartet, und braucht einige Optimierungen wirklich verschiedenes offenen proccesses (mit mehreren Openoffice Kopien, mehrere Dienste unter verschiedenen Benutzern ausgeführt werden.) Müssen

Wie vorgeschlagen, JODConverter kann verwendet werden, um auf den OpenOffice-Prozess zuzugreifen.

http://code.google.com/p/jodconverter/wiki/GettingStarted

1

Sie können dies versuchen:

http://www.jopendocument.org/

sein eine Open-Source-Java-basierte Bibliothek, die Sie mit offenen Office-Dokumenten ohne offenes Büro arbeiten kann, wodurch die Notwendigkeit für die OOserver entfernen.

+0

scheint verlassen. –

6

Mit der aktuellen Version von (3.0-SNAPSHOT) ist es einfach, mehrere Threads von OOo im Headless-Modus zu handhaben, da die Bibliothek jetzt das Starten mehrerer Instanzen unterstützt und sie in einem Pool hält Portnummern oder Named Pipes beim Erstellen einer OfficeManager-Instanz:

final OfficeManager om = new DefaultOfficeManagerConfiguration() 
    .setOfficeHome("/usr/lib/openoffice") 
    .setPortNumbers(8100, 8101, 8102, 8103) 
    .buildOfficeManager(); 

om.start(); 

Sie können uns dann die Bibliothek zzum Konvertieren von Dokumenten, ohne sich mit dem Pool von OOo-Instanzen im Hintergrund befassen zu müssen: