У меня есть листы XSLstyle и некоторые файлы примеров XML, которые можно преобразовать в PDF-файлы.Я проверил, что листы XSL верны (PDF, сгенерированный с использованием версии Apache-FOP 2.3
для командной строки, является непротиворечивым и не выдает никаких ошибок).Когда я использую Eclipse > Run > Transform
с Xalan 2.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 - это JDomDocument XML-файла, который я хочу преобразовать, а xslFile - это xslStylesheet, который я хочу применить.Я проверил значения docJDom, xslFile, и они верны.
EDIT 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:table-row height="0.5cm"/>
, которые являются источником ошибки.Однако затем я преобразовал тот же XML-файл, используя ту же таблицу стилей XSL, но с бинарным дистрибутивом Apache-FOP 2.3, полученный fo был правильным и не содержал этих ошибок.