2015-07-20 48 views
0

我需要將由XAPP上的Apache POI生成的文件附加到便籤文檔中。我一直在試圖實現一個解決方案,建議通過克努特赫爾曼:將通過POI生成的文件附加到便籤文檔中

var temp = java.lang.System.getProperty("java.io.tmpdir"); 
var file = new java.io.File(temp + "YourFile.docx"); 
var fileOutputStream = new java.io.FileOutputStream(file); 
xwpfdocument.write(fileOutputStream); 
fileOutputStream.close(); 

var doc:NotesDocument = currentDocument.getDocument(); 
var rdoc:NotesDocument = database.createDocument(); 
rdoc.appendItemValue("Form", "frmRespTempl"); 
rdoc.appendItemValue("Subject", "Embedded Word Document"); 
var rtitem:RichTextItem = rdoc.createRichTextItem("Body"); 
rtitem.embedObject(lotus.domino.local.EmbeddedObject.EMBED_ATTACHMENT,"",file.getAbsolutePath(), null); 
rdoc.makeResponse(doc); 
rdoc.save(); 

POI for XPages - save Word document as attachment in rich text field

然而,爲了使xwpfdocument.write(FileOutputStream中)工作時,Java策略文件需要修改,這是安全風險。

我沒有運氣使Java解決方案工作。有沒有其他方法可以使這個代碼工作?修改java策略的風險究竟是什麼?

感謝

+1

您可能想要採取不同的方法並將您的文檔存儲爲mime。可以使用流創建MIME部分,而不需要臨時文件 – stwissel

+0

謝謝。這聽起來像我想要這樣做的方式。有沒有這方面的文件? – user4372614

+0

嗨stwissel,我已經習慣了以下代碼使用流附加文件。該示例僅適用於已存儲在服務器上的文件。我怎樣才能使這個拾起poi的輸出........ var stream:NotesStream = session.createStream(); session.setConvertMIME(false); var doc:NotesDocument = database.createDocument(); doc.replaceItemValue(「Form」,「Provider」); – user4372614

回答

0

您的瀏覽器或Notes客戶端,因爲如果你想將文件發送到用戶端的代碼將永遠不會在瀏覽器中運行運行代碼。它將在服務器端工作。

如果您想在Notes客戶端中附加本地文檔,我建議您使用代碼嵌入文件來啓動Notes代理。

不是修改java.policy文件的,我想你可以寫 你一個jar文件中實現和地方jar文件從你的XPage代碼的服務器和實例它的類路徑的類。

+0

爲什麼代碼不能在瀏覽器中工作?看起來像是從XPage調用代碼,並嘗試將由POI創建的Word文檔附加到當前數據庫中的文檔。 –

+0

所有代碼都在服務器上運行,如問題中所示的SSJS代碼。您可以使用默認的java策略設置使用服務器上的本地文件。 –

+0

這將在生產服務器上運行(完全基於Xpages訪問)。從您之前的討論中,我不確定是否修改策略設置中的權限是一個好主意。它是否正確?有什麼風險?只能將權限授予需要調用的函數嗎? – user4372614