我正在开发一个 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
我正在寻找有关如何解决此 NoSuchMethodError 的指导。这是我的问题:
用于 PDF 导出的 openpdf 和 PrimeFaces 14.0.3 是否存在已知的兼容性问题? 我的项目中是否存在其他依赖项会干扰 PDF 生成? PrimeFaces 或 openpdf 中是否需要其他配置才能正确处理 PDF 导出? 任何帮助或见解将不胜感激!
对我来说这个错误很可疑
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
。