2017-01-27 18 views
0

私はAltova StyleVisionを使用してXSLT-FOテンプレートを生成していますが、XSLT 1.0 FOファイルを生成すると、以下のコード。XSLT 2.0変換PDFへのJavaのSaxonでの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(); 
     } 

このコードはうまくいきます。

XSLT-FO 2.0

私はStyleVisionにからXSLT-FO 2.0のテンプレートを生成すると問題は、XSLT 2.0の機能を使用しようとしています。

私はので、私はsaxon9.jarをダウンロードし、[パスを構築するために追加]記事HereHereを読んだことが、私はちょうどTransformerFactoryの工場=新しいnet.sf

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

以下のような変圧器工場を変更.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) 

は君たちのいずれかがサクソンHEを使用してJavaでPDFにXML + XSLT 2.0に変換する完全なソリューションを知ってい得ます。

ご協力いただければ幸いです。

ありがとうございました。

答えて

2

君たちのいずれかがサクソンHEを使用してJavaで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第4版の著者からの回答があるとは思っていません。 saxon9ee.jarはまだ失敗していますが、私のトラブルで私を助けてくれてありがとう。 – IsaacK

+0

Saxon-EE jarをクラスパス上に置くだけでなく、 'TransformerFactory factory = new com.saxonica.config.EnterpriseTransformerFactory();' –

関連する問題