Apache FOP - 未为 Fop 类型定义方法 getDefaultHandler()

Apache FOP - The method getDefaultHandler() is undefined for the type Fop

我需要将 XML 转换为 PDF 文档,因为我正在使用 XSL - Apache FOP (Java)。对于下面的行

,我得到了下面的错误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>

您的依赖项中同时包含 an old 和新版本的 fop。因此,您的 IDE 或 Java 编译器必须选择没有该方法的旧版本。从依赖项中删除旧版本。