答案是,這取決於您使用FOP的程度。
當我們從0.2更新版本*向.9那麼1.0版本中,我們不得不修改了不少,但我們產生了大量的各種FO的(我們FO轉化成PostScript),我們需要產生各種PostScripts來查看新版本中的工作和失敗。根據您以前的工作情況,您可能會發現任何可能已經消失的東西很容易替代。
幸運的是,我們已經將對Driver和Fop類的引用合併到了一個自定義實用程序中,因此它沒有那麼糟糕,只是換出了一個使用FopFactory的新實用程序引用。
您的第一步應該是編寫一個抽象Facade作爲@Wivani建議整合您的舊的fop引用調用,確保它在您的代碼中有效,然後通過用一個使用新代碼的實現替換舊的Facade 。
唯一令我不滿的是Fop社區需要相當長的一段時間才能應用bug修補程序並生成新版本。我們在生產中使用了v1和XML Graphics 1.4,沒有任何問題(生成PostScript和TIFF文件的基本FO)。
如果你需要的話,我會在星期一補充這個貼子的幫助代碼。
UPDATE 下面是我們以前使用的FO文件轉換成PostScript:
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;
我剛纔讀的頁面@ApacheFop「從早期版本升級」,並在我看來,你有一些重寫要做。 – Wivani
@Wivani,我很害怕,但我希望能有一些簡單的方法可用。 – Veger
如果你願意,你可以爲這兩個API編寫一個'Facade'並將其提供給Apache FOP項目;-) – Wivani