我正在使用JasperReports库生成PDF报告。我这个报告我有一个产生问题的QRCode。我不得不添加许多库:
jasperreports,itext,itext-pdfa,itext-pdf,commons-beanutils,commons-collections,commons-digester,commons-logging,groovy-all,barbecue,barcode,barcode4j,batik-anim,batik-bridge,core ,w3c.css.sac,w3c,xmlgraphics-commons,batik-all
我收到一个例外:
java.lang.ClassCastException: org.apache.batik.anim.dom.SVGOMDocument cannot be cast to org.apache.batik.dom.svg.SVGOMDocument
at org.apache.batik.bridge.BridgeContext.setDocument(Unknown Source)
at org.apache.batik.bridge.GVTBuilder.build(Unknown Source)
at net.sf.jasperreports.renderers.AbstractSvgDataToGraphics2DRenderer.ensureSvg(AbstractSvgDataToGraphics2DRenderer.java:166)
at net.sf.jasperreports.renderers.AbstractSvgDataToGraphics2DRenderer.getDimension(AbstractSvgDataToGraphics2DRenderer.java:111)
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.processGraphics2D(JRPdfExporter.java:1793)
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.process(JRPdfExporter.java:1582)
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.access$300(JRPdfExporter.java:1535)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportImage(JRPdfExporter.java:1475)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:1093)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:1056)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:920)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:537)
at reports.JasperReport.generatePdf(JasperReport.java:178)
有什么问题?
答案 0 :(得分:-1)
如果这是你自己的代码(你写的),那只是因为你导入了错误的SVGOMDocument类(它属于不同的Java包)。 您应该能够通过合适的Java IDE(Eclipse,IntelliJ,NetBeans)快速找到它。
另外,尽量避免隐式导入,例如:
import org.apache.batik.dom.svg.*;
import org.apache.batik.anim.dom.*;
这可能会降低您的代码稳定性,例如上面添加的行可能会改变您对现有工作代码的引用。 使用显式导入(import org.apache.batik.dom.svg.SVGOMDocument)。
找出您调用的方法的返回类型,并从正确的Java包导入。在Eclipse IDE中,您只需删除包含上述包/类的导入,然后选择Source>组织导入(Ctrl-Shift-O)。
如果您在单个源代码文件中同时拥有这两个类,则可能需要为其中一个类使用完整的类名,例如:
org.apache.batik.dom.svg.SVGOMDocument document = SomeLibrary.getSomething();