我正在将Apache FOP与XSL-FO结合使用,将XML转换为格式化的PDF。现在我在Java中有以下方法(忽略该方法现在不返回布尔值的事实):
public boolean Transform() throws TransformerException, FOPException
{
Transformer lTransformer;
java.io.ByteArrayOutputStream lOutStream = new java.io.ByteArrayOutputStream();
FopFactory lFopFactory = FopFactory.newInstance();
FOUserAgent lFOAgent = lFopFactory.newFOUserAgent();
lTransformer = getTransformer(mXsltSource); // returns a new Transformer
Fop fop = lFopFactory.newFop(mMimeOut, lFOAgent, lOutStream);
Result res = new SAXResult(fop.getDefaultHandler());
lTransformer.transform(mSource, res); // transforms xml source to formatted XSL-FO transform
}
但是,我不确定如何使用“res”来确保“lTransformer.transform(StreamSource,Result)”方法正确执行(我假设这是Result对象的目的)。我已经查看了转换方法,Result类和SAXResult类的javadoc,但这些并没有提供太多帮助。任何人都能对此有所了解吗?
TL; DR; 在 javax.xml.transform.Transformer.transform(StreamSource,Result)中传递结果的目的是什么,以及如何使用它来检查操作是否成功完成?
答案 0 :(得分:0)
转换的结果将写入该Result对象。如果查看创建Result
对象的对象链,您指定的输出流最终会写入结果的位置(您将ByteArrayOutputStream
传递给FopFactory.newFop()
,然后将Fop
处理程序传递给Result
- 输出流是xsl转换的最终目的地。
将FileOutputStream
指向磁盘上的某个文件而不是ByteArrayOutputStream
,并在转换后(如果一切正常),该文件应该是您可以查看的PDF文件。