Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svg 使用Batik和Itext将vaadin图表导出为pdf时出错_Svg_Itext_Vaadin_Nosuchmethoderror_Batik - Fatal编程技术网

Svg 使用Batik和Itext将vaadin图表导出为pdf时出错

Svg 使用Batik和Itext将vaadin图表导出为pdf时出错,svg,itext,vaadin,nosuchmethoderror,batik,Svg,Itext,Vaadin,Nosuchmethoderror,Batik,各位 当我尝试将图表导出到pdf文件时,出现此错误。 我从Itext站点获取了这个示例,并在代码中实现了它。 这是执行导出的代码片段 else if (isGrafico(componente)) { System.out.println("============= Encontrou um Grafico"); Configuration conf = ((GraficoComp) componente)

各位

当我尝试将图表导出到pdf文件时,出现此错误。 我从Itext站点获取了这个示例,并在代码中实现了它。 这是执行导出的代码片段

else if (isGrafico(componente)) {    
                System.out.println("============= Encontrou um Grafico");
                Configuration conf = ((GraficoComp) componente)
                        .getGraficoGerado().getConfiguration();
                String svgStr = SVGGenerator.getInstance().generate(conf);
                System.out.println(svgStr);

                 /** The SVG document factory. */
                SAXSVGDocumentFactory factory;
                /** The SVG bridge context. */
                BridgeContext ctx;
                /** The GVT builder */
                GVTBuilder builder;

                String parser = XMLResourceDescriptor.getXMLParserClassName();
                factory = new SAXSVGDocumentFactory(parser);

                UserAgent userAgent = new UserAgentAdapter();
                DocumentLoader loader = new DocumentLoader(userAgent);
                // Ok =========================================================
                // \/ Error happens in this line
                ctx = new BridgeContext(userAgent, loader);
                ctx.setDynamicState(BridgeContext.DYNAMIC);

                builder = new GVTBuilder();

                // =============================================
                PdfContentByte cb = writer.getDirectContent();
                PdfTemplate chart = cb.createTemplate(900, 900);
                drawSvg(factory,builder,ctx,chart, svgStr);
                cb.addTemplate(chart, 0, 0);
下面是错误:

2014-06-17T13:46:08.623+0000|WARNING: ApplicationDispatcher[/AmbienteRelatorio] PWC1231: Servlet.service() for servlet Ambienterelatorio Application threw exception
java.lang.NoSuchMethodError: org.json.JSONObject.put(Ljava/lang/String;Ljava/util/Collection;)Lorg/json/JSONObject;
at com.vaadin.server.VaadinService.createCriticalNotificationJSON(VaadinService.java:1574)
at com.vaadin.server.VaadinService.handleExceptionDuringRequest(VaadinService.java:1424)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1402)
at com.vaadin.server.VaadinPortlet.handleRequest(VaadinPortlet.java:435)
at com.vaadin.server.VaadinPortlet.serveResource(VaadinPortlet.java:538)
at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:118)
at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:71)
at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:93)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:70)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:785)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:649)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:483)
at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:454)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)
at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:634)
at com.liferay.portlet.InvokerPortletImpl.invokeResource(InvokerPortletImpl.java:746)
at com.liferay.portlet.InvokerPortletImpl.serveResource(InvokerPortletImpl.java:503)
at com.liferay.portal.action.LayoutAction.processPortletRequest(LayoutAction.java:941)
at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:664)
at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:244)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:174)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:533)
at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:510)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

这不是一个简单的问题。您的stacktrace不会在任何地方引用iText。它指的是Liferay、Struts和Vaadin,它会通知您有关

您指的是我编写的一个示例,但我在该示例中没有使用JSON。有一个
NoSuchMethodError
可能是由许多因素引起的:

  • 有一个对不存在的方法的引用。这是一个编程错误。通常,如果代码使用的方法不存在,则无法对其进行编译
  • 在同一产品的两个不同罐中有一个方法的参考。由于模糊性,您的JVM不知道您想要哪种方法。在这种情况下,您需要清理类路径
  • 有一个对确实存在的方法的引用,但它被更改了。在这种情况下,您需要重新编译所有代码
  • 关于案例3。以具有方法栏()的类Foo为例

    您正在应用程序中使用该类

    Foo foo = new Foo();
    foo.bar();
    
    现在,
    bar()
    方法突然改变如下:

    public class Foo {
        public int bar() { return 0; }
    }
    
    如果替换包含
    Foo
    类的jar,应用程序将抛出
    NoSuchMethodError
    ,因为方法的签名已更改。这可能会令人困惑,因为方法就在那里。只是应用程序找不到它,因为应用程序正在查找
    void bar()
    ,而不是
    int bar()

    public class Foo {
        public int bar() { return 0; }
    }