有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java生成pdf PDFBox无头docker容器失败

我使用pdfbox在Java中创建PDF。当作为一个普通的Java应用程序从我的Mac上运行时,这很好用。然而,用例是从服务器端运行此命令,从web浏览器生成pdf

我已将应用程序部署到docker容器中,但现在无法工作(加载字体时出现各种错误——arrayindexoutofbounds、EOFEException等)。这似乎是由于pdfbox在java中的运行方式。awt。无头模式当我输出java在Mac上运行的模式时,无头模式返回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就是答案,但我不知道如何设置它,然后设置适当的XSessionAuthority/DISPLAY/etc


共 (1) 个答案

  1. # 1 楼答案

    事实证明,这与在无头模式下跑步无关。最初抛出的错误是实际错误(即字体文件已损坏),我应该坚持调查这些错误

    问题在于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工作,并设置了display env变量,在工作时,这让我回到了最初关于字体损坏的错误。 为了让Xvfb运行以达到这个目的,我必须重写docker run命令的入口点,以获得一个bash容器,然后启动我的vert。从容器内执行x进程