我正在尝试使用 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 中列出/解决依赖项来澄清和更新问题后:
-
mvn dependency:tree -Dverbose
(Maven 通过扩展依赖树显示依赖冲突的指南:先下载它们) -
mvn dependency:resolve
(只是尝试下载所有依赖项/JAR)
..似乎有以下(根本)根本原因。
似乎有问题
当 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
以进行代理相关配置,以及如何设置 CNTLM 或 Wagon 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/