2011-11-13 3 views
2

스프링 MVC를 기반으로하는 자바 웹 애플리케이션이 있습니다. 작업은 pdf 파일을 생성하는 것입니다. 모두 봄 엔진에는 iText 라이브러리가 내장되어 있으므로 pdf 파일을 생성하는 작업은 매우 간단합니다. 우선 우리는 AbstractView에 과부하를 걸고 일부 PdfView를 생성해야합니다. 그리고 seconf는 컨트롤러에서 해당 뷰를 사용하는 것입니다. 그러나 내 응용 프로그램에서 생성 된 pdf 파일을 로컬 드라이브에 저장하거나 사용자에게 해당 파일을 다운로드 할 수있는 링크를 제공 할 수 있어야합니다. 그래서 그 사건은 저에게 적합하지 않습니다.스프링 MVC pdf 생성

PDF 파일을 생성하고 바이트 배열을 반환하는 범용 PDF 생성기를 만들고 싶습니다. 그래서 나는 그 배열을 (하드 드라이브에) 파일을 저장하거나 브라우저에서 직접 인쇄하는 데 사용할 수 있습니다. 그리고 질문은 - PdfVIew 솔루션에서 바이트 배열 만 반환하는 엔진을 사용할 수있는 방법이 있습니까? 오버로드 된 buildPdfDocument 메서드 (PdfView)에 이미 PdfWriter 및 Document 매개 변수가 있기 때문에 묻습니다. 감사합니다.

답변

2

tldr; 보기를 사용하여 파일에 저장할 수 있어야합니다.

AbstractPdfView를 오버로드 할 때 Flying Saucer 및 해당 iTextRenderer를 사용해보세요.

import org.xhtmlrenderer.pdf.ITextRenderer; 
public class MyAbstractView extends AbstractView { 
    OutputStream os; 

    public void buildPdfDocument(Map<String,Object> model, com.lowagie.text.Document document, com.lowagie.text.pdf.PdfWriter writer, HttpServletRequest request, HttpServletResponse response){ 
    //process model params 
    os = new FileOutputStream(outputFile); 
    ITextRenderer renderer = new ITextRenderer(); 
    String url = "http://www.mysite.com"; //set your sample url namespace here 
    renderer.setDocument(document, url); //use the passed in document 
    renderer.layout(); 
    renderer.createPDF(os); 
    os.close(); 
    } 
} 

protected final void renderMergedOutputModel(Map<String,Object> model, 
             HttpServletRequest request, 
             HttpServletResponse response) 
            throws Exception{ 
if(os != null){ 
    response.outputStream = os; 
} 

public byte[] getPDFAsBytes(){ 
    if(os != null){ 
    byte[] stuff; 
    os.write(stuff); 
    return stuff; 
    } 
} 

}

당신은 아마 여기에 표시된 샘플 구현을 조정할해야하지만 기본적인 요점을 제공해야한다.

+0

답장을 보내 주셔서 감사합니다. 불행히도, 나는 grails를 사용하지 않습니다. 누군가 "순수한"java + spring을 구현하는 방법을 알고 있습니까? – nKognito

+0

Grails는 Spring MVC와 Groovy의 다른 것들이며 자바와 매우 유사합니다. 이 대답은 http://svn.codehaus.org/grails-plugins/grails-rendering/trunk/에서 구할 수있는 라이브러리 소스를 검사하여 유사한 기능을 구성 할 수있는 참조 포인트입니다. 0.3 버전을 다운로드하고 PdfRenderingService와 그 부모 클래스를 자세히 살펴보면, 순수 자바와 근본적으로 유사하다는 것을 알 수 있습니다. –

+0

렌더링은 Flying Saucer를 커버 아래에 사용합니다.이 플롯은 출력 스트림을 생성하기 위해 특별히 사용하는 방법에 대한 자습서가 있습니다. 링크를 확인하십시오. –