java - 动态报告导出pdf类未找到异常错误

标签 java itext

我正在尝试使用 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 ,表示缺少以下类:com.lowagie.text.DocumentException

分辨率0:

重新导入您的 Maven 项目(mvn clean install)并确保依赖项 iText 或至少一个名为 的类>com.lowagie.text.DocumentException 位于类路径中。

或者您可以使用 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

<小时/>

通过建议的命令在 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 和/或下载 JAR 依赖项。 有两种可能的解决方案:

解决方案 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 存储库。

关于java - 动态报告导出pdf类未找到异常错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59455306/

相关文章:

java - 在 Android 上使用 iText 将 HTML 转换为 PDF。如何设置 UTF-8(变音符号)?

java - 无法使用 Spring Boot 和 Jersey 2 提供静态内容

java - 如何在java中显示pdf中的泰卢固字体

java - Groovy:什么是 java stream anyMatch 的模拟

java - PostgreSQL 错误更新表上的 ResultSet "No primary key found for table"w/key

itext - 将边距应用到运行的 CSS 位置

c# - 向 PdfPTable、iTextSharp 添加一列

itext - itext7 中的短语被什么取代了?

java - 更改 AOSP 中 Android 标准按钮的功能

java - 降低静态方法的可见性