2012-08-23 105 views
0

我已經被創建和渲染爲送過來一個servlet一個PDF的XML文件:追加完整的PDF文件,PDF FOP

TraxInputHandler input = new TraxInputHandler(
    new File(XML_LOCATION+xmlFile+".xml"), 
    new File(XSLT_LOCATION) 
); 
ByteArrayOutputStream out = new ByteArrayOutputStream(); 

//driver is just `new Driver()` 
synchronized (driver) { 
    driver.reset(); 
    driver.setRenderer(Driver.RENDER_PDF); 
    driver.setOutputStream(out); 
    input.run(driver); 
} 

//response is HttpServletResponse 
byte[] content = out.toByteArray(); 
response.setContentType("application/pdf"); 
response.setContentLength(content.length); 
response.getOutputStream().write(content); 
response.getOutputStream().flush(); 

這是所有工作完全正常。

但是,我現在有另一個PDF文件,我需要包括在輸出中。這只是我給出的完全獨立的.pdf文件。有什麼方法可以將此文件追加到響應,驅動程序,out或其他任何可將其包含在對客戶端的響應中的方法?那會工作嗎?或者還有什麼我需要做的?

回答

1

我們也使用FOP生成一些文檔,並且我們接受上傳的文檔,我們最終將所有這些文檔合併爲一個PDF。

你不能只給他們按順序出流,因爲綜合作用的結果,需要一個適當的PDF文件頭,元數據等

我們使用iText library要合併文件,出發與

PdfReader reader = new PdfReader(/*String*/fileName); 
reader.consolidateNamedDestinations(); 

我們稍後通過將每個pdf中的頁面添加到新的合併目標pdf中,隨時調整書籤/頁碼。

AFAIK,FOP不提供這種功能。