当前位置: 首页 > 知识库问答 >
问题:

Apache FOP -没有为类型FOP定义getDefaultHandler()方法

陆栋
2023-03-14

我有一个将XML转换为PDF文档的要求,因为使用的是XSL - Apache FOP(Java)。我收到以下错误 方法 getDefaultHandler() 未定义用于以下行的 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个答案

巫研
2023-03-14

您的依赖项中既有fop的旧版本,也有新版本。因此,您的IDE或Java编译器必须选择没有该方法的旧版本。从依赖项中删除旧版本。

 类似资料:
  • 正如代码所示,我想知道的是,在内存分配中,隐藏Base而不调用子的额外方法的实际情况是什么,它被调用了什么,有没有一种通过Base调用方法的方法。请帮忙

  • 问题内容: 我尝试使用Gin框架(用于Golang的框架)。 https://github.com/gin-gonic/gin 然后我从官方github复制了示例代码。 就像这样。 但是我得到了错误。 有谁知道我该如何解决这个问题? ・ CentOS7 ・ go版本go1.6.3 linux / amd64 编辑: 我实际上使用了滑行,但我将杜松子酒更新为全局。并更新到1.7,但仍然出现相同的错误

  • 我已使用以下代码注册自定义邮件类型: 问题是,这篇文章的URL变成了: 但是,我需要: 有没有办法从URL中删除帖子类型的段塞“电影”,比如默认情况下在前端显示的帖子和页面? 谢谢

  • 问题内容: 我对Java和android完全陌生,因此我尝试从android和数据库中找到有用的示例。我发现这个博客有一个项目: http://saigeethamn.blogspot.com/2009/10/android-developer-tutorial- part-12.html 我运行了该项目,它运行正常,但是我试图创建一个新项目,以将代码复制并粘贴到其中,但这不起作用:( 我在这条线

  • 问题内容: 我有一种方法来创建类的对象列表 我的产品类别是: 我收到一个错误,指出该类型的方法未定义,其他方法也是如此。请帮助我解决此错误。 我的说法正确吗? 问题答案: 我的说法正确吗? 不,这是不正确的。产品不是类的实例,而是类的实例。List没有任何称为的方法。 如果要从列表中检索元素并使用它创建另一个实例,可以执行以下操作: 但是请确保您在列表中有元素,否则您可能会遇到异常。product

  • 所以我正在尝试将Jsoup安装到Eclipse。 创建用户库(窗口- 所以我试着运行他们在网站上给出的示例(参见代码),我可以导入文档和元素。但它一直在“连接”上出错。我做错什么了吗??有人知道如何解决这个问题吗? 错误: 测试组: