gpt4 book ai didi

java - 更新到最新的 FOP API

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:36:57 24 4
gpt4 key购买 nike

我希望更新应用程序以使用最新的 fop API。该应用程序使用 0.20 版本的库,例如仍在使用 Driver 类。

我似乎无法找到任何关于如何更新到最新 fop 版本的合理信息。我发现了一些片段,例如应该使用 FOPFactory。

所以我想知道是否有人可以向我推送有关更新到新的(最)fop API 的资源?还是真的无法更新,我是否需要重写应用程序的这一部分?

PS 我找到了 fop upgrading页面(当然),但它似乎没有指出两个版本的类/API 之间的相似之处。

最佳答案

答案是,这实际上取决于您使用 FOP 的程度。

当我们从 .2* 版本更新到 .9,然后是 1.0 版本时,我们不得不修改很多,但是我们生成了各种各样的 FO(我们将 FO 转换为 PostScript)并且我们需要生成一个各种 PostScript,以查看在较新版本中哪些有效,哪些失败。根据您过去的做法,您可能会找到一个简单的替代品来替换可能已经消失的任何东西。

幸运的是,我们已经将对 Driver 和 Fop 类的引用合并到自定义实用程序,因此简单地换出使用 FopFactory 的新实用程序引用的过渡并不是那么糟糕。

您的第一步应该是按照@Wivani 的建议编写一个抽象 Facade 以合并您的旧 fop 引用调用,确保它在您的代码中有效,然后通过使用新代码的实现替换您的旧 Facade 来继续前进。

关于 Fop 唯一让我不高兴的是社区需要相当长的时间来应用错误补丁和生成新版本。我们在生产中使用 v1 和 XML Graphics 1.4 没有任何问题(生成 PostScript 和 TIFF 文件的基本 FO)。

如果您需要的话,我会在周一用一些帮助代码来补充这篇文章。

更新这是我们用来将 FO 文件转换为 PostScript 的文件:

String foAsString = "your_fo_as_string";
File destination = new File("path_to_file"");

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(destination));
Driver driver = new Driver(new InputSource(new StringReader(foAsString)), out);
driver.setRenderer(Driver.RENDER_PS);
driver.run();

out.close();

return destination;

这是我们现在使用的摘要。

FopFactory 被创建为实例级

this.fopFactory = FopFactory.newInstance();

代码:

import javax.xml.transform.Source;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;

// ...

String foAsString = "your_fo_as_string";
File destination = new File("path_to_file"");

OutputStream outStream = new BufferedOutputStream(new FileOutputStream(destination));
Fop fop = fopFactory.newFop(MimeConstants.MIME_POSTSCRIPT, outStream);

Transformer transformer = transformerFactory.newTransformer();
Source source = new StreamSource(new StringReader(foAsString));
Result result = new SAXResult(fop.getDefaultHandler());

transformer.transform(source, result);

outStream.close();

return destination;

关于java - 更新到最新的 FOP API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6905481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com