2013-01-16 100 views
0

我創建了一個網頁並希望允許用戶導出網頁的內容。爲此,我使用了Apache-POI庫。這適用於文本。但是我怎樣才能輸出MIME內容?如果我將富文本屬性更改爲「將內容存儲爲html/mime」(因爲我想在Notes中格式化內容,有時內容中包含圖像)。 如果這是不可能的xpage中可用的替代品是什麼?通過Apache-POI將Lotus Notes富文本MIME內容導出到Word/Excel中

下面的代碼將作爲xAgent執行。

感謝 阿明

importPackage(java.io); 
importPackage(org.apache.poi.hwpf); 
importPackage(org.apache.poi.hwpf.usermodel); 
importPackage(org.apache.poi.poifs.filesystem); 

var docID = sessionScope.contentUNID; 
var nv:NotesView = database.getView("(allByKey)"); 
var doc:NotesDocument = nv.getDocumentByKey(docID, true); 

var fs:POIFSFileSystem = new POIFSFileSystem(new FileInputStream("empty.doc")); 
var wdoc:HWPFDocument = new HWPFDocument(fs); 
var wdRange:Range = wdoc.getRange(); 

wdRange.insertBefore(doc.getItemValueString("title")); 
wdRange.insertAfter(doc.getMIMEEntity("content")); !!!doesn'twork 

var extCont = facesContext.getExternalContext(); 
var pageResponse = extCont.getResponse(); 
var pageOutput = pageResponse.getOutputStream(); 

pageResponse.setContentType("application/vnd.ms-word"); 
pageResponse.setHeader("Cache-Control", "no-cache"); 
pageResponse.setHeader("Content-Disposition","inline; filename=export.doc"); 
wdoc.write(pageOutput); 
pageOutput.flush(); 
pageOutput.close(); 

facesContext.responseComplete(); 

回答

1

您將需要使用MIMEEntity類的方法來獲取內容。例如doc.getMIMEEntity("content").getContentAsText()。爲此,您可能需要在獲取文檔之前設置session.setConvertMIME(false)

另一種方法是將其作爲RichTextItemdoc.getFirstItem("content")並使用RichTextItem類的方法獲取內容。在這種情況下,您不會設置session.setConvertMIME(false)

+0

好吧,我意識到我需要MIMEEntity的方法。如果我使用getContentAsText,則會得到「這是一個MIME格式的多部分消息」。該代碼將作爲一個xAgent(xpage沒有渲染)執行,所以我無法設置會話屬性(至少我不知道這一點)。對不起,我錯過了xAgent的信息。 –

+0

@ArminMandel是的,你可以(並且經常必須)在XPage未呈現時也使用會話。 –

+1

@ArminMandel:你必須解析整個MIME消息,而不僅僅是第一個節點。 –

相關問題