2011-08-01 6 views
3

最新のfop APIを使用するようにアプリケーションを更新する予定です。 アプリケーションは、ライブラリのバージョン0.20を使用します。たとえば、Driverクラスは引き続き使用されています。最新のFOP APIへの更新

私は、最新のfopバージョンに更新する方法に関する賢明な情報を見つけることができないようです。いくつかのスニペットが見つかりました。たとえば、FOPFactoryを使用する必要があります。

誰かが新しい(est)fop APIに更新するためのリソースを私に与えることができるのだろうかと思いましたか? 更新することは実際には不可能であり、アプリケーションのこの部分を書き直す必要がありますか?

PS私はfop upgradingページを見つけましたが(もちろん)、両方のバージョンのクラス/ APIの間の類似点を指摘していないようです。

+0

私はちょうどページ@ApacheFopその「以前のバージョンからのアップグレード」を読んで、あなたが持っている私には思えますいくつかの書き換えがあります。 – Wivani

+0

@Wivani、私は恐れていましたが、私はいくつかの簡単な方法があることを望んでいました。 – Veger

+1

これまでのところ、両方のAPIのために 'Facade'を書いてApache FOPプロジェクトに貢献することができます;-) – Wivani

答えて

2

答えは、あなたがFOPをどのくらい使っているかによって大きく変わるはずです。

.2 *バージョンから.9、そして1.0バージョンに更新したとき、かなり修正する必要がありましたが、FO(PostScriptにFOを変換しました)新しいバージョンで何が成功し、何が失敗したのかを知るためのさまざまなPostScriptがあります。あなたがしていたことに基づいて消えた可能性のあるものは、簡単に置き換えることができます。

ドライバとFopクラスへの参照がカスタムユーティリティに統合されていたため、FopFactoryを使用した新しいユーティリティリファレンスを単に交換するだけではあまり変わりありませんでした。

あなたの最初のステップは、抽象Facadeを書くことです@Wivaniはあなたの古いFop参照呼び出しを統合し、あなたのコードで動作することを確認し、古いFacadeを新しいコードを使用する実装。

Fopについて私に不快感を与えたのは、コミュニティがバグパッチを適用して新しいリリースを生成するまでかなりの時間がかかります。本番ではv1をXML Graphics 1.4で問題なく使用しました(PostScriptとTIFFファイルを生成するための基本的なFO)。

月曜日にこの投稿を補足します。必要な場合はヘルパーコードを追加します。ここで

UPDATE たちはPostScriptにFOファイルを変換するのに使用するために使用するものである:ここでは

String foAsString = "your_fo_as_string"; 
File destination = new File("path_to_file""); 

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(destination)); 
Driver driver = new Driver(new InputSource(new StringReader(foAsString)), out); 
driver.setRenderer(Driver.RENDER_PS); 
driver.run(); 

out.close(); 

return destination; 

は、私たちが今使用しているものの抽象的です。 FopFactoryが

this.fopFactory = FopFactory.newInstance(); 

コードとしてインスタンスレベルとして作成され

import javax.xml.transform.Source; 
import javax.xml.transform.Templates; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMResult; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.sax.SAXResult; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 

import org.apache.fop.apps.Fop; 
import org.apache.fop.apps.FopFactory; 
import org.apache.fop.apps.MimeConstants; 

// ... 

String foAsString = "your_fo_as_string"; 
File destination = new File("path_to_file""); 

OutputStream outStream = new BufferedOutputStream(new FileOutputStream(destination)); 
Fop fop = fopFactory.newFop(MimeConstants.MIME_POSTSCRIPT, outStream); 

Transformer transformer = transformerFactory.newTransformer(); 
Source source = new StreamSource(new StringReader(foAsString)); 
Result result = new SAXResult(fop.getDefaultHandler()); 

transformer.transform(source, result); 

outStream.close(); 

return destination; 
+0

あなたの答えをありがとう!私は後で本当にそれを見ます!いくつかのサンプルコードを投稿していただければ、本当に助けになるでしょうが、それはあなた次第です:) – Veger

+0

答えはコードで更新されました。覚えておいても、あなたのFOによって生成されたエラーを調べ、問題が何であるかを判断する必要があります。たくさんテスト! – JoshDM

関連する問題