Ответ заключается в том, что это действительно зависит от того, сколько вы используете FOP.
Когда мы обновлялись с версии .2* до версии .9, а затем до версии 1.0, нам пришлось довольно много переделать, но мы создали большое разнообразие FO (мы преобразовали FO в PostScript), и нам нужно было сгенерировать множество PostScripts. чтобы увидеть, что сработало, а что не удалось в более новых версиях. Скорее всего, вы найдете легкую замену всему, что могло исчезнуть из-за того, что вы делали раньше.
К счастью, у нас были консолидированные ссылки на классы Driver и Fop в пользовательской утилите, и поэтому было не так уж плохо просто заменить новую ссылку на утилиту, которая использовала FopFactory.
Ваш первый шаг должен состоять в том, чтобы написать абстрактный Facade, как предлагает @Wivani, чтобы объединить ваши старые вызовы ссылок fop, убедиться, что они работают в вашем коде, а затем двигаться вперед, заменив ваш старый Facade реализацией, которая использует более новый код.
Единственное, что меня не устраивает в Fop, это то, что сообществу требуется довольно много времени, чтобы применить исправления ошибок и создать новые выпуски. Мы без проблем использовали v1 в производстве с XML Graphics 1.4 (базовый FO для создания файлов PostScript и TIFF).
Я дополню этот пост в понедельник вспомогательным кодом, если он вам понадобится.
ОБНОВЛЕНИЕ Вот что мы использовали для преобразования файла 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;
person
JoshDM
schedule
16.10.2011