Пустой xsl результат в затмении с использованием Apache FOP 2.3 - PullRequest
0 голосов
/ 11 июня 2018

У меня есть листы 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 был правильным и не содержал этих ошибок.

1 Ответ

0 голосов
/ 11 июня 2018

Я обнаружил ошибку: таблицы стилей XSL верны, проблема в том, что модуль, использующий эти файлы, копирует их в другую папку и использует эти копии для преобразования PDF.При запуске модульных тестов по отдельности мои исправленные листы XSL не были скопированы, и поэтому я использовал старые неправильные версии.

...