2011-08-01 2 views
3

최신 fop API를 사용하도록 애플리케이션을 업데이트하려고합니다. 응용 프로그램에서 라이브러리의 버전 0.20을 사용합니다 (예 : Driver 클래스가 아직 사용되고 있음).최신 FOP API로 업데이트

최신 version 버전으로 업데이트하는 방법에 대한 적절한 정보를 찾을 수없는 것 같습니다. FOPFactory를 사용해야한다는 발췌 문장을 발견했습니다.

그래서 누군가가 새로운 (est) fop API로 업데이트하는 데 리소스를 사용할 수 있는지 궁금합니다. 또는 업데이트 할 수 없으며 응용 프로그램의이 부분을 다시 작성해야합니까?

추신 : 나는 물론 fop upgrading 페이지를 발견했지만 두 버전의 클래스/API간에 유사점을 지적하지는 않습니다.

+0

난 그냥 페이지 @ApacheFop '이전 버전에서 업그레이드'읽었습니다 그리고 당신은 나에게 보인다

FopFactory는

this.fopFactory = FopFactory.newInstance(); 

코드

로 인스턴스 레벨로 생성된다 약간의 다시 쓰기. – Wivani

+0

@Wivani, 나는 두려웠지만 몇 가지 쉬운 방법이 있기를 바랬습니다. – Veger

+1

당신이 그것에 익숙하다면 두 API 모두를위한 'Facade'를 작성하여 Apache FOP 프로젝트에 기여할 수 있습니다 ;-) – Wivani

답변

2

답변은 FOP의 사용 정도에 따라 달라집니다.

.2 * 버전을 .9, 1.0 버전으로 업데이트했을 때 우리는 꽤 많이 수정해야했지만 FO (PostScript로 변환 된)를 다양하게 만들었고 어떤 PostScript가 새로운 버전에서 작동하고 어떤 점이 실패했는지 확인하는 다양한 PostScript. 당신이 해왔 던 일을 기반으로 사라진 것이 무엇이든 쉽게 대체 할 수 있습니다.

드라이버 및 Fop 클래스에 대한 통합 참조가 사용자 지정 유틸리티에 통합되어 있으므로 FopFactory를 사용하는 새로운 유틸리티 참조를 단순히 전환하는 것이 좋지 않았습니다.

첫 번째 단계는 @Wivani가 이전의 fop 참조 호출을 통합하고 코드에서 작동하는지 확인한 다음 이전 Facade를 새 코드를 사용하는 구현으로 대체하여 앞으로 이동하는 것처럼 추상 Facade를 작성하는 것입니다 .

Fop에 대해 나에게 불쾌감을 줄 수있는 유일한 점은 커뮤니티에서 버그 패치를 적용하고 새로운 릴리스를 생성하는 데 꽤 오래 걸리는 것입니다. 우리는 문제없이 XML 그래픽 1.4를 사용하여 프로덕션 환경에서 v1을 사용했습니다 (PostScript 및 TIFF 파일을 생성하는 기본 FO).

필요할 경우이 헬프 코드로 월요일에이 게시물을 보완 할 것입니다.

UPDATE 는 여기에 우리가 포스트 스크립트로 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; 

우리가 지금 무엇을 사용의 추상이다.

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