当前位置: 首页 > 知识库问答 >
问题:

Lucee 5.0中的Docx4j库

曾弘扬
2023-03-14

背景

Docx4j是一个Java库,可用于处理Microsoft Word文档,如Java中的XML。我们用Coldfusion编写的旧应用程序已经正确地使用了这个库。然后我们转向了更新的软件Lucee。这已经给实现Docx4j库带来了问题。它最终通过将带有所有依赖项的Docx4j jar放到文件夹“wwwroot/WEB-INF/lucee/lib”中来工作。重启Lucee服务后,它正确地加载了jar。这里还有一些其他问题,但重要的是jar被加载到环境中。

那么现在有什么问题呢?

现在我们有了一个新项目,它安装在新的Lucee 5.0上。一切正常,只有docx4j出现了问题。当在代码中使用docx4j时,它会出现错误,指出Docx4j记录器工厂未加载。这是Docx4j使用的依赖项。我发现了一些信息,Lucee 5.0与外部jar库的工作方式不同,它需要成为一个OSGi框架包。但是这再次变得很难理解Lucee需要什么来让它工作

我试图实现什么

每次使用Coldfusion/Lucee时,都会用到jar文件Docx4j和所有依赖jar文件。所以我把所有这些jar文件放在Coldfusion读取的文件夹中,然后它就可以工作了。所以我想说的是,没有设置文件或类似的东西(可能在jar文件本身中?)

我试过什么?

当然,我尝试了几件事:

>

  • 首先,我尝试将它放入“inetpub/wwwroot/WEB-INF/Lucee/lib”。您第一次在前端加载该函数时,它会声明无法加载记录器工厂。在此之后调用该函数后,它会声明根本无法加载docx4j。它仍然在管理员中写道Docx4j仍然处于活动状态。

    尝试通过Lucee管理员将其作为zip文件上传,它表示上传太大了

    试着把它放在“露西/tomcat/露西-服务器/上下文/lib”中。与第1点完全相同的问题。我也可以在服务仍在运行时重命名Docx4j jar。这是工作示例中不可能的。第二次之后错误发生了变化,这也很奇怪。这可能是露西对jar文件做了些什么。

    我认为解决方案是什么?

    我发现一些信息表明Lucee 5.0对jar库做了一些不同的事情。现在,它希望成为OSGi的一部分。您可以通过给定一个manifest.xml文件来制作一个包,该文件将jar文件制作成一个包。但是我不知道该怎么做。因为它总是与以前的版本一起工作,我认为解决方案可能非常简单。即增加一行说明依赖关系。因此,可能需要一个cfadmin标记来加载这些依赖项,供Docx4j使用。

    哪些是有用的信息?

    • 我从错误/jar文件中截取的一些屏幕截图:https://postimg.org/gallery/39zbmifbi/
    • 这是一个有相同问题的人:https://groups.google.com/forum/#!主题/lucee/LKRS7otUYjc

    从4.5版到5版的更新不应该有这样的结果。我们需要库,否则我们必须回到旧版本,我们的客户不同意。我真的认为最后一个链接有解决方案,但是很难处理信息。

  • 共有1个答案

    那弘
    2023-03-14

    使用Lucee 5,您有三种选择:

    1) 如果库是 OSGi 捆绑包,只需将其放在 {lucee-server}/捆绑包

    2) 如果库不是 OSGi 捆绑包,就像 Docx4j 的情况一样,请将 jar(及其依赖项,如果需要)放入 servlet 容器的类路径中,例如 Tomcat 或 Jetty(或您使用的任何容器)。

    “最简单”的事情是将jar放在与Lucee jar相同的目录中。

    另一个选项是更新容器的类路径,例如,对于Tomcat,将其添加到< code > { catalina-base }/conf/catalina . properties 中的< code>common.loader中。

    3)指定一个自定义路径为您的罐子,无论是作为参数createObject(java…),或在Application.cfc通过this.javaSettings

    至于缺少的依赖项,请务必使用包含所有依赖项的jar,即docx4j-community-3.3.1.zip而不是docx4j-3.3.1.jar如果从http://www.docx4java.org/downloads.htmlhtml" target="_blank">下载

     类似资料:
    • docx4j 是一个解压的docx包(docx本身是zip包)和解析WordprocessingML格式XML的Java库 。 最新版本的 docx4j 也支持PowerPoint pptx文件。  它类似于微软的.NET的OpenXML SDK。 docx4j 严重依赖  JAXB(一个Java JCP标准的XML绑定的)。 你可以认为 docx4j 是一个JAXB的实现和扩展 * 开放打包协议

    • 如何从docx4j中删除图像。 假设我有10个映像,我想用我自己的字节数组/二进制数据替换8个映像,我想删除剩下的2个。 我也有麻烦在定位图像。 是否可以用图像替换文档中的文本占位符?

    • 我需要在我用docx4j生成的文档中有条件地删除/添加分页符。如果页面内容适合整个页面,那么我添加的分页符会创建一个空白页。我使用下面的代码来删除分页符: } 但这也删除了有用的分页符。那么,有什么方法可以动态检查页面内容高度吗?或者其他解决方案?

    • 我正在尝试在我的项目中使用docx4j。(我在这方面还是个新手。) 我只是尝试从这个链接运行示例代码。 http://www.smartjava.org/content/create-complex-word-docx-documents-programatically-docx4j 输入是。docx文件,输出也是一个. docx文件。 这是控制台在尝试读取我的模板文件时给我的信息: 此处的环境列

    • 我一直试图填充一个word模板(.docx)文件,其中有需要替换的占位符。 我能够重写模板,但是文本没有换行符,我知道回车或新行(\r\n)在.docx文件中不起作用。我使用VariableReplace方法进行转换,但是在使用变量replace时无法放置br或factory.createbr()。 任何建议都会很有帮助。下面是我尝试的一段代码