2011-11-13 140 views
2

我有一個基於Spring MVC的java web應用程序。 任務是生成一個PDF文件。衆所周知,Spring引擎有自己的內置iText庫,因此生成pdf文件非常簡單。首先我們需要做的是重載AbstractView並創建一些PdfView。關鍵是在控制器中使用該視圖。但在我的應用程序中,我也必須能夠將生成的PDF文件存儲在本地驅動器上,或者向我的用戶提供一些鏈接以下載該文件。所以這種情況下的觀點不適合我。Spring MVC pdf生成

我想創建一個用於創建一個PDF文件,並返回字節數組一些通用的PDF生成器。所以我可以使用該陣列來存儲文件(在硬盤上)或直接在瀏覽器中打印。問題是 - 在PdfVIew解決方案中有沒有辦法使用這種引擎(只返回字節數組)?我問,因爲重載的buildPdfDocument方法(在PdfView中)已經有PdfWriter和Document參數。 謝謝

回答

2

tldr;你應該能夠使用一個視圖並將其保存到一個文件中。

嘗試使用Flying Saucer及其iTextRenderer當重載AbstractPdfView。

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中的其他內容,與Java非常相似。這個答案意味着你可以通過檢查圖書館的來源構建類似的功能,這可以在http://svn.codehaus.org/grails-plugins/grails-rendering/trunk/上找到。下載0.3版本並專門查看PdfRenderingService及其父類,並且您會發現它基本類似於純Java。 –

+0

渲染只是使用飛碟下面,它有一個很好的教程,你將如何專門用它來創建一個輸出流。檢查鏈接。 –