使用 PrimeFaces 和 OpenPDF 导出 PDF 时出现 NoSuchMethodError

问题描述 投票:0回答:1

我正在开发一个 JSF 应用程序,使用 PrimeFaces 14.0.3 进行 PDF 导出。

                        <p:commandButton 
                            id="btnPdf" 
                            class="m-1 ui-button-info"
                            ajax="false"
                            rendered="true"
                            icon="fas fa-file-pdf"
                            value="Export as PDF">
                            <p:dataExporter type="pdf" target="tbl" fileName="processional_fees" />
                        </p:commandButton>

尝试将 DataTable 导出为 PDF 时,遇到以下错误:

WARNING: StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NoSuchMethodError: 'com.lowagie.text.pdf.PdfPCell com.lowagie.text.pdf.PdfPTable.addCell(com.lowagie.text.pdf.PdfPCell)'
    at org.primefaces.component.datatable.export.DataTablePDFExporter.addCell(DataTablePDFExporter.java:165)
    ...

这是我的 pom.xml 中用于 PDF 处理的相关部分:

<dependency>
    <groupId>com.github.librepdf</groupId>
    <artifactId>openpdf</artifactId>
    <version>1.4.1</version>
</dependency>

我还根据 PrimeFaces 文档的初步建议尝试使用 openpdf 版本 2.0.3,该文档列出了用于 PDF 导出的 openpdf 1.4.1。但是,两个版本中都存在该错误。

我的环境包括:

PrimeFaces 14.0.3

  • JSF 2.3
  • Java 11
  • 帕亚拉5

我正在寻找有关如何解决此 NoSuchMethodError 的指导。这是我的问题:

用于 PDF 导出的 openpdf 和 PrimeFaces 14.0.3 是否存在已知的兼容性问题? 我的项目中是否存在其他依赖项会干扰 PDF 生成? PrimeFaces 或 openpdf 中是否需要其他配置才能正确处理 PDF 导出? 任何帮助或见解将不胜感激!

jsf primefaces
1个回答
0
投票

对我来说这个错误很可疑

java.lang.NoSuchMethodError:'com.lowagie.text.pdf.PdfPCell com.lowagie.text.pdf.PdfPTable.addCell(com.lowagie.text.pdf.PdfPCell)'

PR837 中:修改了 PdfPTable 添加单元格方法以返回单元格,进行了重大更改,以便在调用

com.lowagie.text.pdf.PdfPCell
时返回
addCell
。它与 1.4.x 版本集成。所以它肯定应该存在于 1.4.1 或 1.4.2 中

根据错误,它找不到这样的方法签名。因此,我假设您的设置中的某些内容弄乱了依赖项,并引入了一个没有此重大更改的

com.github.librepdf
版本(可能是 1.3.X 版本)

OpenPDF 自述文件下的依赖项

2.0.x 分支需要 Java 17 或更高版本。
1.4.x 分支需要 Java 11 或更高版本。
1.3.x 分支需要 Java 8 或更高版本。

所以我希望

2.0.3
根本不起作用,因为您为您的环境列出了
Java 11

© www.soinside.com 2019 - 2024. All rights reserved.