FopFactory类型中的newInstance(FopFactoryConfig)方法不适用于参数()

时间:2018-05-06 07:42:37

标签: java xml xslt compiler-errors apache-fop

我需要使用XSL - Apache FOP(Java)将XML转换为PDF文档。得到以下错误类型FopFactory中的方法newInstance(FopFactoryConfig)不适用于下面一行的arguments()

// create an instance of fop factory
    FopFactory fopFactory = FopFactory.newInstance();

请找到我的完整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();  // Error throwing in this line..
    // 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/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 个答案:

答案 0 :(得分:1)

检查您的Apache FOP版本的API文档,我认为您需要提供基本URI或配置文件,例如。

FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());

将当前工作目录的URI设置为基URI。