Xslt 空xsl使用ApacheFop2.3导致eclipse
我有XSL样式表和一些XML示例文件要转换成PDF。我已经验证了XSL表是正确的(使用命令行版本的Xslt 空xsl使用ApacheFop2.3导致eclipse,xslt,apache-fop,Xslt,Apache Fop,我有XSL样式表和一些XML示例文件要转换成PDF。我已经验证了XSL表是正确的(使用命令行版本的ApacheFop2.3生成的PDF是一致的,没有抛出错误)。当我将Eclipse>Run>Transform与xalan2.7.1一起使用时,结果与命令行版本的FO输出相同 然而,从那时起,我就尝试用java实现嵌入式版本,但它一直不起作用。我检查了FO结果,它似乎没有任何FO标记,结果文件只包含XML的文本值。这将导致出现fop.fo.ValidationException 我怀疑这与某些库的版
ApacheFop2.3
生成的PDF是一致的,没有抛出错误)。当我将Eclipse>Run>Transform
与xalan2.7.1
一起使用时,结果与命令行版本的FO
输出相同
然而,从那时起,我就尝试用java实现嵌入式版本,但它一直不起作用。我检查了FO
结果,它似乎没有任何FO
标记,结果文件只包含XML的文本值。这将导致出现fop.fo.ValidationException
我怀疑这与某些库的版本冲突有关,或者可能与属性文件中缺少的参数有关,但到目前为止,我还没有找到错误
编辑
我无法共享XSL和XML文件,但下面是我的java代码片段:
private void transformToPdf(Document docJDOM, OutputStream destination, File xslFile)
throws SAXException, IOException, JDOMException, TransformerException {
FopFactory fopFactory = FopFactory.newInstance(FOPCONFIGFILE);
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, destination);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new
StreamSource(xslFile));
Source source = new DOMSource(transformJdomToDom(docJDOM));
Result result = new SAXResult(fop.getDefaultHandler());
transformer.transform(source, result);
}
其中FOPCONFIGFILE是我的fop.xconf文件(我使用Apache fop网站中提供的默认文件),docJDom是我希望转换的xml文件的JDomDocument,xslFile是我希望应用的xslStylesheet。我已经检查了docJDom和xslFile的值,它们是正确的
编辑2
我刚刚尝试使用嵌入的代码输出fo结果文件
通过改变这个
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new
StreamSource(xslFile));
Source source = new DOMSource(transformJdomToDom(docJDOM));
Result result = new SAXResult(fop.getDefaultHandler());
transformer.transform(source, result);
对此
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(xslFile));
Source source = new DOMSource(transformJdomToDom(docJDOM));
Result result = new StreamResult(destination);
transformer.transform(source, result);
并检查生成的fo是否存在错误。我能够找到多行,例如
,它们是错误的来源。
但是,我随后使用相同的XSL样式表转换了相同的XML文件,但使用了Apache FOP 2.3二进制发行版,生成的fo是正确的,并且不包含这些错误。我找到了错误:XSL样式表是正确的,问题是,使用这些文件的模块将它们复制到不同的文件夹,并使用这些副本进行pdf转换。通过单独运行单元测试,我更正的XSL表没有被复制,因此我使用的是旧的不正确版本。你能分享相关的代码片段吗。Java、XSL、XML?@AniketV不幸的是,我无法为XSL和XML文件提供支持。它们是公司的财产。我将添加我的java代码段。