gpt4 book ai didi

java - 生成 pdf PDFBox headless docker 容器失败

转载 作者:行者123 更新时间:2023-11-30 08:02:59 24 4
gpt4 key购买 nike

我正在使用 pdfbox 在 Java 中创建 pdf。当从我的 Mac 作为普通 Java 应用程序运行时,这工作得很好。然而,用例是从服务器端运行它以从网络浏览器生成 pdf。

我已将应用程序部署到 Docker 容器中,但现在无法工作(加载字体时出现各种错误 - arrayindexoutofbounds、eofException 等)。这似乎是由于 pdfbox 在 java.awt.headless 模式下运行的方式造成的,因为当我输出 java 在 Mac 上运行的模式时,它对于 headless 模式返回 false,而在服务器上运行则返回 true。

我已在代码中显式设置了 java.awt.headless=false 设置,现在出现了许多其他错误。缺少与 X 服务器等相关的库。我已经安装了这些库,但现在出现错误:

java.awt.AWTError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.

围绕 SO 等有很多建议,例如设置 DISPLAY=:0.0 等,但这些都不起作用。在 docker 容器中运行显然有点复杂,但是有人可以在这里提出一些建议吗?

我猜测使用虚拟 xserver 是答案,但我对如何设置它感到困惑,然后设置适当的 xsessionAuthoriy/DISPLAY/等。

最佳答案

事实证明,这与在 headless 模式下运行没有任何关系。引发的初始错误是实际错误(即字体文件已损坏),我应该继续调查这些错误。

问题在于 Maven 将我的应用程序与二进制和文本资源混合打包的方式。添加

<resources>
<resource>
<directory>target/classes</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
</nonFilteredFileExtensions>

到我的 maven pom 停止了字体被破坏。

不过还是谢谢你的指点。根据记录,我确实让 Xvfb 工作并设置了显示环境变量,这在工作时让我回到了有关字体损坏的原始错误。为了让 Xvfb 运行来达到此目的,我必须覆盖 docker run 命令上的入口点以获取 bash 容器,然后从容器内启动我的 vert.x 进程。

关于java - 生成 pdf PDFBox headless docker 容器失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31609095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com