2017-01-27 14 views
0

Я использую 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.

Любая помощь будет высоко оценена.

Спасибо.

ответ

2

Кто-нибудь из вас, ребята знают полного решения, которое преобразует XML + XSLT 2.0 в формате PDF в Java с помощью саксонских HE.

Сообщение об ошибке довольно ясно: если вы хотите использовать XSLT 2.0, ориентированный на схему, вам нужен Saxon-EE. Ответ на ваш вопрос:

Если вы хотите сделать это с помощью Saxon-HE, то ваша таблица стилей не может использовать xsl:import-schema.

+0

Привет, Извините за позднюю перезагрузку, я добавил saxon9ee.jar, но все же у меня такая же ошибка. – IsaacK

+0

О, Боже мой. Я не могу поверить, что у меня есть ответ от автора XSLT 2.0 и XPath 2.0 4th Edition. Спасибо, что помогли мне с моими проблемами, хотя saxon9ee.jar все еще не работает. – IsaacK

+0

Как и помещать банку Saxon-EE в путь класса, вам нужно вызвать его с помощью 'TransformerFactory factory = new com.saxonica.config.EnterpriseTransformerFactory();' –