动态报告导出 pdf class 未找到异常错误

dynamic report export pdf class not found exception error

我正在尝试在 java 中使用 动态报表开源库。

我的pom.xml:

<dependencies>
  <!-- https://mvnrepository.com/artifact/net.sourceforge.dynamicreports/dynamicreports-core -->
<dependency>
    <groupId>net.sourceforge.dynamicreports</groupId>
    <artifactId>dynamicreports-core</artifactId>
    <version>6.1.0</version>
</dependency>

我的java代码:

 List<Employee> employeeList = new ArrayList<Employee>();
             employeeList.add(new Employee("1", "Selva"));
               report()//create new report design
                 .columns(
                    Columns.column("ID", "id", String.class),
                    Columns.column("Name", "name" , String.class) 
                  ) //adds columns
                 .setDataSource(employeeList)
                 .toPdf(new FileOutputStream(new File("D://selvapdf.pdf"))); //export report to pdf

此代码引发此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException
    at net.sf.dynamicreports.jasper.transformation.ExporterTransform.pdf(ExporterTransform.java:440)
    at net.sf.dynamicreports.jasper.transformation.ExporterTransform.transform(ExporterTransform.java:134)
    at net.sf.dynamicreports.jasper.builder.JasperReportBuilder.export(JasperReportBuilder.java:891)
    at net.sf.dynamicreports.jasper.builder.JasperReportBuilder.toPdf(JasperReportBuilder.java:731)
    at net.sf.dynamicreports.jasper.builder.JasperReportBuilder.toPdf(JasperReportBuilder.java:720)
    at com.sample.dynamicreport.App.main(App.java:33)
Caused by: java.lang.ClassNotFoundException: com.lowagie.text.DocumentException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6 more

为什么动态报表模块没有这个依赖?我是否应该添加或有任何其他新方法? 下面是 dependency:tree

的输出
[INFO] Scanning for projects...
[INFO] 
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building dynamicreport 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] Downloading: http://repo.maven.apache.org/maven2/com/lowagie/itext/2.1.7.js6/itext-2.1.7.js6.pom
[INFO] Downloading: http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/com/lowagie/itext/2.1.7.js6/itext-2.1.7.js6.pom
[INFO] Downloading: http://jaspersoft.jfrog.io/jaspersoft/jr-ce-releases/com/lowagie/itext/2.1.7.js6/itext-2.1.7.js6.pom
[WARNING] The POM for com.google.zxing:core:jar:3.3.3 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.434 s
[INFO] Finished at: 2019-12-26T11:23:22+05:30
[INFO] Final Memory: 11M/155M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project dynamicreport: Could not resolve dependencies for project com.sample:dynamicreport:jar:0.0.1-SNAPSHOT: Failed to collect dependencies at net.sourceforge.dynamicreports:dynamicreports-core:jar:6.1.0 -> net.sf.jasperreports:jasperreports:jar:6.9.0 -> com.lowagie:itext:jar:2.1.7.js6: Failed to read artifact descriptor for com.lowagie:itext:jar:2.1.7.js6: Could not transfer artifact com.lowagie:itext:pom:2.1.7.js6 from/to jaspersoft-third-party (http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/): Access denied to http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/com/lowagie/itext/2.1.7.js6/itext-2.1.7.js6.pom. Error code 407, Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied.  ) -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

任何帮助将不胜感激!!!

缺少依赖关系 iText ?

可能您缺少导出为 PDF 所需的名为 iText 的依赖项。因此,编译器抛出 NoClassDefFoundError 表示缺少以下 class:com.lowagie.text.DocumentException.

分辨率 0:

重新导入您的 Maven 项目 (mvn clean install) 并确保依赖项 iText 或至少 class 调用 com.lowagie.text.DocumentException 在 class 路径中。

或者您可以使用 DynamicReport's GitHub repository 的更新版本。 这是基于 Jasper Reports 版本 6.5.1,它再次使用 iText 将报告导出为 PDF。

如果您在 JasperReports 6.1.0 on Maven 的依赖项中搜索 iText,您会发现:

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7.js6</version>
    <scope>compile</scope>
  <!-- lines omitted -->
</dependency>

此依赖项应适用于您的 DynamicReports 版本 6.1.0。所以你可以 将它单独添加到你的 POM.

另请参阅:Similar NoClassDefFound-error question


通过 listing/resolving 通过建议的命令在 POM 中的依赖项 澄清和更新问题后:

.. 似乎有以下(潜在的)根本原因。

问题似乎

当 Maven 尝试从外部存储库解析或下载依赖项时,出现此 代理相关访问错误 (HTTP status 407):

Error code 407, Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. )

似乎您在代理后面,该代理阻止访问远程 POM and/or 下载 JAR 依赖项。 有 2 种可能的解决方案:

解决方案 1:设置 Maven 以使用代理

How to access a Maven Repository from behind a Proxy 上查看此问题和答案。这将告诉您如何编辑 Maven settings.xml 以进行与代理相关的配置,以及如何设置 CNTLMWagon HTTP 轻量级 Maven 扩展。

解决方案 2:手动下载并安装缺少的依赖项

首先通过浏览器页面从 Jaspersoft 的存储库 (JFrog Artifactory) 手动下载 JAR 文件itext-2.1.7.js6.jar

然后 install this 3rd party JAR 到您本地的 Maven 存储库。