2009-03-09 11 views

risposta

5

Sì, sto usando OpenOffice come un server di conversione dei documenti.

Sfortunatamente, la soluzione al problema è generare un pool di processi di OpenOffice.

Il ramo commons-pool di JODConverter (prima che si spostasse a code.google.com) ha implementato questo out-of-the-box per voi.

1

Vlad è corretto sull'esecuzione di più istanze di OpenOffice su porte diverse.

Vorrei solo aggiungere che OpenOffice non sembra essere stabile. Eseguiamo 10 istanze di esso in un ambiente di produzione e impostiamo il codice per riprovare con un'altra istanza se il primo tentativo fallisce. In questo modo quando uno dei server di OpenOffice si arresta in modo anomalo (o non si arresta in modo anomalo ma non risponde) la produzione non viene influenzata. Poiché è un problema continuare a riavviare i server ogni giorno, stiamo lentamente convertendo tutti i nostri documenti in JasperReports (vedi iReport per i dettagli). Non sono sicuro di come stai usando il server OpenOffice; lo usiamo per la fusione della posta (compilando moduli per i clienti). Se devi convertire le cose in PDF, ti consigliamo di utilizzare lo iText.

2

OpenOffice può essere utilizzato in modalità senza testa, ma non è stato progettato per gestire molte richieste in un ambiente di produzione stressante.

Utilizzando OpenOffice in modalità headless ha diversi problemi:

  • Il processo potrebbe morire/diventano non disponibili.
  • Ci sono diversi problemi di perdite di memoria.
  • apertura diversi OpenOffice "lavoratori" non scala come previsto, e ha bisogno di qualche ritocco per avere veramente diverso proccesses aperti (avendo diverse copie di OpenOffice, diversi servizi, che girano sotto diversi utenti.)

Come suggerito, JODConverter può essere usato per accedere al processo di OpenOffice.

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

1

si può provare questo:

http://www.jopendocument.org/

sua una libreria basata opensource Java che permette di lavorare con i documenti di Office aperti senza open office, eliminando così la necessità di OOserver.

+0

sembra deserto. –

6

Con la versione corrente di JODConverter (3.0-SNAPSHOT), è abbastanza semplice gestire più thread di OOo in modalità headless, poiché la libreria ora supporta l'avvio di più istanze e il loro mantenimento in un pool, fornendo solo diversi numeri di porta o pipe con nome durante la costruzione di un'istanza di OfficeManager:

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

om.start(); 

Puoi quindi noi la libreria ad es.per la conversione di documenti senza dover gestire il pool di istanze OOo in background:

OfficeDocumentConverter converter = new OfficeDocumentConverter(om); 
converter.convert(new File("src/test/resources/test.odt"), new File("target/test.pdf")); 
Problemi correlati