2017-01-27 8 views
0

Altova StyleVision을 사용하여 XSLT-FO 템플릿을 생성합니다. XSLT 1.0 FO 파일을 생성 할 때 Apache FOP 변환을 사용하여 PDF로 변환 할 수 있습니다. 아래 코드를 참조하십시오.XSLT 2.0 변환 PDF로 변환 Saxon을 사용하여 Java에서 Apache FOP 및 스타일 비전 사용

 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(); 
     } 

이 코드는 훌륭합니다.

문제 내가 StyleVision에서 XSLT-FO 2.0 템플릿을 생성 할 때, XSLT 2.0의 기능을 사용하기 위해 노력 해왔다 2.0

XSLT-FO.

나는 기사 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(); 나는이 코드를 실행하면

, 나는 HE 색슨 사용하여 자바에서 PDF로 XML + XSLT 2.0 변환

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) 

당신의 어떤 사람이 완벽한 솔루션을 알고 있나요 오류를 얻을.

도움을 주시면 감사하겠습니다.

감사합니다.

답변

2

너희들 중 하나가 HE 색슨 사용하여 자바에서 PDF로 XML + XSLT 2.0 변환하는 완벽한 솔루션을 알고 있나요.

오류 메시지는 분명합니다. 스키마 인식 XSLT 2.0을 사용하려면 Saxon-EE가 필요합니다. 귀하의 질문에 대한 답변은 다음과 같습니다

Saxon-HE에서 사용하려면 스타일 시트에서 xsl:import-schema을 사용할 수 없습니다.

+0

안녕하세요 relpy에 대한 죄송합니다. saxon9ee.jar을 추가했지만 여전히 동일한 오류가 있습니다. – IsaacK

+0

오 마이 갓. XSLT 2.0 및 XPath 2.0 4th Edition의 저자로부터 응답을 얻지 못했다고 생각합니다. saxon9ee.jar가 여전히 실패하고 있지만 내 문제를 도와 주셔서 감사합니다. – IsaacK

+0

클래스 패스에 Saxon-EE jar 파일을 넣는 것뿐만 아니라'TransformerFactory factory = new com.saxonica.config.EnterpriseTransformerFactory(); '와 함께 호출해야합니다. –