有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Apache FOP类型的getDefaultHandler()方法未定义

我需要使用XSL-ApacheFop(Java)将XML转换为PDF文档。我得到下面一行的错误The method getDefaultHandler() is undefined for the type Fop

 Result res = new SAXResult(fop.getDefaultHandler());

请找到我的完整JAVA代码

public static void main (String args[])
    {
        // the XSL FO file
        File xsltfile = new File("sample2.xsl");
        // the XML file from which we take the name
        StreamSource source = new StreamSource(new File("sample2.xml"));
        // creation of transform source
        StreamSource transformSource = new StreamSource(xsltfile);
        // create an instance of fop factory
        FopFactory fopFactory = FopFactory.newInstance();
        // a user agent is needed for transformation
        FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
        // to store output
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();

        Transformer xslfoTransformer;
        try
        {
            xslfoTransformer = getTransformer(transformSource);
            // Construct fop with desired output format
                Fop fop;
            try
            {
                fop = fopFactory.newFop
                    (MimeConstants.MIME_PDF, foUserAgent, outStream);
                // Resulting SAX events (the generated FO) 
                // must be piped through to FOP
                        Result res = new SAXResult(fop.getDefaultHandler());

                // Start XSLT transformation and FOP processing
                try
                {
                        // everything will happen here..
                    xslfoTransformer.transform(source, res);
                    // if you want to get the PDF bytes, use the following code
                    //return outStream.toByteArray();

                    // if you want to save PDF file use the following code
                    File pdffile = new File("Result.pdf");
                    OutputStream out = new java.io.FileOutputStream(pdffile);
                                out = new java.io.BufferedOutputStream(out);
                                FileOutputStream str = new FileOutputStream(pdffile);
                                str.write(outStream.toByteArray());
                                str.close();
                                out.close();

                }
                catch (TransformerException e) {
                    throw e;
                }
            }
            catch (FOPException e) {
                throw e;
            }
        }
        catch (TransformerConfigurationException e)
        {
            throw e;
        }
        catch (TransformerFactoryConfigurationError e)
        {
            throw e;
        }
    }

    private static Transformer getTransformer(StreamSource streamSource)
    {
        // setup the xslt transformer
        net.sf.saxon.TransformerFactoryImpl impl = 
                new net.sf.saxon.TransformerFactoryImpl();

        try {
            return impl.newTransformer(streamSource);

        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        }
        return null;
    }

请查找我的依赖项:

<!-- https://mvnrepository.com/artifact/fop/fop -->
<dependency>
    <groupId>fop</groupId>
    <artifactId>fop</artifactId>
    <version>0.20.5</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/fop -->
<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>fop</artifactId>
    <version>2.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/net.sf.saxon/Saxon-HE -->
<dependency>
    <groupId>net.sf.saxon</groupId>
    <artifactId>Saxon-HE</artifactId>
    <version>9.8.0-11</version>
</dependency>

共 (1) 个答案

  1. # 1 楼答案

    依赖项中既有an old又有新版本的fop。因此,您的IDE或Java编译器必须使用旧版本,而旧版本没有该方法。从依赖项中删除旧版本