Я использую Altova StyleVision для создания и XSLT-FO шаблона. Когда я создаю файл XSLT 1.0 FO, я успешно конвертирую PDF с преобразованием Apache FOP, используя код ниже.Преобразование XSLT 2.0 в PDF на Java с использованием саксонского интерфейса с использованием Apache FOP и стиля Vision
DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
Configuration cfg = cfgBuilder
.buildFromFile(new File("fop.xconf"));
FopFactoryBuilder fopFactoryBuilder = new FopFactoryBuilder(
new File("fopbase").toURI()).setConfiguration(cfg);
FopFactory fopFactory = fopFactoryBuilder.build();
File xsltFile = new File(
"xslt1File.xslt");
StreamSource xmlSource = new StreamSource(
new File("xmlData.xml"));
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
OutputStream out;
out = new java.io.FileOutputStream("GeneratedPDF.pdf");
try {
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(new StreamSource(xsltFile));
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(xmlSource, res);
} finally {
out.close();
}
Этот код отлично работает.
XSLT-FO 2,0
Issue пытается использовать особенности XSLT 2.0, Когда я генерировать XSLT-FO 2.0 шаблон из StyleVision.
Я прочитал статью Here и Here поэтому я скачал saxon9.jar [и добавил построить путь], я изменил трансформаторный завод так же, как ниже
DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
Configuration cfg = cfgBuilder
.buildFromFile(new File("fop.xconf"));
FopFactoryBuilder fopFactoryBuilder = new FopFactoryBuilder(
new File("fopbase").toURI()).setConfiguration(cfg);
FopFactory fopFactory = fopFactoryBuilder.build();
File xsltFile = new File(
"xslt1File.xslt");
StreamSource xmlSource = new StreamSource(
new File("xmlData.xml"));
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
OutputStream out;
out = new java.io.FileOutputStream("GeneratedPDF.pdf");
try {
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl();
Transformer transformer = factory.newTransformer(new StreamSource(xsltFile));
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(xmlSource, res);
} finally {
out.close();
}
TransformerFactory завод = новый net.sf .saxon.TransformerFactoryImpl();
Когда я запускаю код, я получаю сообщение об ошибке
Error at xsl:import-schema on line 12 column 67 of xsltfile.xslt:
XTSE1650: xsl:import-schema requires Saxon-EE
javax.xml.transform.TransformerConfigurationException: net.sf.saxon.s9api.SaxonApiException: xsl:import-schema requires Saxon-EE
at net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(SaxonTransformerFactory.java:157)
at net.sf.saxon.jaxp.SaxonTransformerFactory.newTransformer(SaxonTransformerFactory.java:110)
at main.FopTransformer.convertToPDF(FopTransformer.java:60)
at main.FopTransformer.main(FopTransformer.java:29)
ли кто-нибудь из вас, ребята, знаете полного решения, которое преобразует XML + XSLT 2.0 в формате PDF в Java с помощью саксонских HE.
Любая помощь будет высоко оценена.
Спасибо.
Привет, Извините за позднюю перезагрузку, я добавил saxon9ee.jar, но все же у меня такая же ошибка. – IsaacK
О, Боже мой. Я не могу поверить, что у меня есть ответ от автора XSLT 2.0 и XPath 2.0 4th Edition. Спасибо, что помогли мне с моими проблемами, хотя saxon9ee.jar все еще не работает. – IsaacK
Как и помещать банку Saxon-EE в путь класса, вам нужно вызвать его с помощью 'TransformerFactory factory = new com.saxonica.config.EnterpriseTransformerFactory();' –