XDocReport 使用 OSGI 将 ODT 转换为 PDF

2022-09-03 08:09:13

要开始使用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

除了在类路径中,我有(它不是OSGi捆绑包),我导出以下软件包:itext-4.2.1.jar

  <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: Unresolve constraint in bundle org.odftoolkit.odfdom.converter.core [43]: 无法解决 43.0: missing requirements [43.0] osgi.wiring.package;(osgi.wiring.package=org.odftoolkit.odfdom.dom)

为了解决问题,我添加到类路径(它也不是OSGi)并导出以下包:org.odftoolkit.odfdom.domodfdom-java-0.8.7.jar

   <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

这些是我的问题:

  1. 我得到空转换器的原因是什么,如何解决它?
  2. XDocReport 使用 itext 或 odfdom 进行转换的库是什么?

答案 1

我通常做的是把不是OSGi捆绑包的库打包起来。关于如何在eclipse中做到这一点的一个很好的教程是Lars Vogel的教程:如何从jars创建Eclipse插件

然后按照在 Eclipse 中创建 jar 文件教程将项目导出为 jar 文件,并在项目中使用它。

现在,您应该已解决所有依赖项。如果您也有动态类加载,则需要额外的步骤。


答案 2

推荐