关于java:在同一个项目上使用飞碟和docx4j

Using flying saucer and docx4j on the same project

我有一个项目,我希望能够将 xhtml 文档格式化为 PDF 格式和 Docx 格式。

一段时间以来,我一直在使用 flysaucer 来格式化 PDF 文档,但出于兼容性原因,我总是不得不使用旧版本的 iText。现在我正在使用 docx4j,我需要将 iText 更新为更新的版本,否则它将无法正常工作。

FlyingSaucer (xhtmlrenderer R8pre2) 使用 iText 2.0.8
docx4j 2.8.0 使用 iText 2.1.7

我只能使用一个 iText 库,但无论我使用哪个 iText 库,最终都会遇到飞碟或 docx4j 的兼容性问题。

目前问题似乎归结为一种特定方法 (com.lowagie.text.pdf.BaseFont.getCharBBox),该方法在一个版本中采用 char 参数,而在另一个版本中采用 int 参数。

我想我可能需要下载 flysaucer 或 iText 的源代码(我认为它们都是开源的)并自己解决这个问题(我以前没有做过,但我认为我可以做到)但我可以想象我我不是第一个遇到这个问题的人,也许还有其他方法可以解决这个问题,或者其他人已经分叉了一个项目来解决这类问题。


披露:我从事 docx4j 项目

docx4j 2.8.0 只使用 iText,因为我们的 Flying Saucer 分支需要它,它执行 XHTML 导入。

在那个分支中,我添加了与 docx 相关的东西,并删除了一些我们不需要的东西。有可能在未来,我们会将这个返还给飞碟——这只是时间的问题。

同时,为了完整起见,我提到你可以在你的类路径上同时拥有真正的 Flying Saucer 和我们的 fork,因为我们的 fork 是重新打包的。

回到您的问题,FlyingSaucer 现在具有相同的 2.1.7 依赖项,因此如果您能够使用当前的资源,那应该可以解决您提出的问题。