2009-06-23 1 views
1

У меня есть необходимость разрешить пользователям экспортировать свои файлы .doc (которые они загружают) в различные форматы. Я начал использовать OO SDK, и я настраивал некоторые пользовательские фильтры, используя XSLT. Все работает хорошо, и я могу экспортировать слова docs в pdf и т. Д.Преобразование Doc с использованием OpenOffice SDK

Однако я хочу запустить это как веб-сервис. Я хочу запустить эту службу преобразования на выделенном узле, поэтому все загрузки файлов пользователями, желающими преобразовать их документ, достигнут этого выделенного узла. Мое веб-приложение само по себе основано на PHP. Каков наилучший способ выполнить преобразование с помощью OO SDK? Я также должен сохранить результирующий файл в БД.

Нужно ли мне запускать несколько экземпляров OO и кормить каждый файл для преобразования в конкретный экземпляр? И мне нужно написать настраиваемый сервер, чтобы справиться с этим, так как я не знаю, является ли OO многопоточным. Любые советы очень оценили.

+0

Я попытался сделать это в своей работе, но нам пришлось отказаться от него, так как мы не могли пройти пассивное размещение элементов документа, таких как нестандартные макеты и изображения из OOo. Мы вместо этого сделаем практически такую ​​же настройку, за исключением MS Office в качестве конвертера. – Chris

ответ

2

Вы изучали использование JODConverter? Он делает весь тяжелый подъем для вас.

+0

Не забывайте, что его кузен-питон, PyODConverter! –

4

с помощью интерфейса DLL, попробуйте следующий код

public conversion() 
{ 
     unoidl.com.sun.star.uno.XComponentContext localContext =uno.util.Bootstrap.bootstrap(); 

     unoidl.com.sun.star.lang.XMultiServiceFactory multiServiceFactory =(unoidl.com.sun.star.lang.XMultiServiceFactory)localContext.getServiceManager(); 

     XComponentLoader componentLoader =(XComponentLoader)multiServiceFactory.createInstance("com.sun.star.frame.Desktop"); 

     XComponent xComponent = componentLoader.loadComponentFromURL(PathConverter(FileName1),"_blank", 0,new PropertyValue[] {MakePropertyValue("Hidden", true)}); 

     unoidl.com.sun.star.beans.PropertyValue [] propertyValues; 
     propertyValues = new unoidl.com.sun.star.beans.PropertyValue[2]; 
     // Setting the flag for overwriting 
     propertyValues[0] = new unoidl.com.sun.star.beans.PropertyValue(); 
     propertyValues[0].Name = "Overwrite"; 
     propertyValues[0].Value = new Any(true); 
     // Setting the filter name 
     propertyValues[1] = MakePropertyValue("FilterName", "HTML (StarWriter)"); 
     /*propertyValues[1] = new unoidl.com.sun.star.beans.PropertyValue(); 
     propertyValues[1].Name = "FilterName"; 
     propertyValues[1].Value = new uno.Any("HTML (StarWriter)"); // writer_pdf_Export , swriter: MS Word 97 , HTML (StarWriter) ,*/ 

     XStorable xStorable = xComponent as XStorable;xStorable.storeToURL(PathConverter(FileName),propertyValues); 
} 

Для получения полного списка filternames на экспорт смотреть в другой ответ, который я дал раньше.