XDocReport конвертирует ODT в PDF с OSGI

Чтобы начать работу с XDocReport, я хочу преобразовать ODT в PDF.

Все мое приложение OSGi. Поэтому я устанавливаю следующие пакеты:

fr.opensagres.xdocreport.converter-1.0.5.jar
fr.opensagres.xdocreport.core-1.0.5.jar
fr.opensagres.xdocreport.document-1.0.5.jar
fr.opensagres.xdocreport.itext.extension-1.0.5.jar
fr.opensagres.xdocreport.template-1.0.5.jar

Кроме того, в пути класса у меня есть itext-4.2.1.jar (это не комплект OSGi), а я экспортируйте следующие пакеты:

  <package name="com.lowagie.text"/>
  <package name="com.lowagie.text.factories"/>
  <package name="com.lowagie.text.pdf"/>
  <package name="com.lowagie.text.pdf.draw"/>

Однако я не получаю конвертер, используя следующий код:

Options options = Options.getFrom(DocumentKind.ODT).to(ConverterTypeTo.PDF);
IConverter converter = ConverterRegistry.getRegistry().getConverter(options);
in = new FileInputStream(new File("/Temp/Test1.odt"));
OutputStream out = new FileOutputStream(new File("/Temp/Test1.pdf"));
converter.convert(in, out, options); //HERE I GET NullPointerException - converter is null.

Пытаясь решить эту проблему, я добавил следующие пакеты:

org.odftoolkit.odfdom.converter.core-1.0.5.jar
org.odftoolkit.odfdom.converter.pdf-1.0.5.jar

Однако я получаю:

org.osgi.framework.BundleException: неопределенное ограничение в пакете org.odftoolkit.odfdom.converter.core [43]: невозможно выполнить 43.0: отсутствует требование [43.0] osgi.wiring.package; (Osgi.wiring.package = org.odftoolkit.odfdom.dom)

Чтобы решить проблему с org.odftoolkit.odfdom.dom, я добавил odfdom-java-0.8.7.jar в classpath (это также не OSGi) и экспортирует следующий пакет:

   <package name="org.odftoolkit.odfdom.doc"/>
   <package name="org.odftoolkit.odfdom.dom"/>
   <package name="org.odftoolkit.odfdom.dom.element.draw"/>
   <package name="org.odftoolkit.odfdom.dom.element.office"/>
   <package name="org.odftoolkit.odfdom.dom.element.style"/>
   <package name="org.odftoolkit.odfdom.dom.element.table"/>
   <package name="org.odftoolkit.odfdom.dom.style"/>
   <package name="org.odftoolkit.odfdom.incubator.doc.office"/>
   <package name="org.odftoolkit.odfdom.incubator.doc.style"/>
   <package name="org.odftoolkit.odfdom.pkg"/>
   <package name="org.odftoolkit.odfdom.dom.attribute.fo"/>
   <package name="org.odftoolkit.odfdom.dom.attribute.style"/>
   <package name="org.odftoolkit.odfdom.dom.attribute.table"/>
   <package name="org.odftoolkit.odfdom.dom.element"/>
   <package name="org.odftoolkit.odfdom.dom.element.svg"/>
   <package name="org.odftoolkit.odfdom.dom.element.text"/>

Однако это не помогло, и я до сих пор получаю NullPointerException.

Это мои вопросы:

  • В чем причина, почему я получаю нулевой конвертер и как его исправить?
  • В какой библиотеке XDocReport использует itext или odfdom для преобразования?

Ответы

Ответ 1

То, что я обычно делаю, это взять библиотеку, которая не была пакетом OSGi, и завернула ее. Хороший учебник о том, как это сделать в eclipse, - это учебник Lars Vogel: Как создать плагины Eclipse из jars.

Затем экспортируйте проект как файл jar, следуя Создание jar файла в Eclipse, и используйте его в своем проекте.

Теперь у вас должны быть разрешены все ваши зависимости. Дополнительные шаги необходимы, если у вас также есть динамическая загрузка классов.