我正在开发一个Java应用程序,它将连接到IBM Notes数据库并从给定的数据库条目中提取附件(将是word文档)。然后需要将word文档保存到本地磁盘。我已经在这里阅读了类似的情况,但我似乎无法确认该文档中是否有嵌入文件,我似乎无法访问它。我到目前为止的代码是:
import java.util.Enumeration;
import java.util.Vector;
import lotus.domino.*;
import lotus.domino.cso.RichTextItem;
public class notesRetrieval extends NotesThread
{
public void runNotes()
{
try
{
Session s = NotesFactory.createSessionWithFullAccess("testpassword");
Database db = s.getDatabase("Server1", "dev/test.nsf", false);
View materialview = db.getView("MaterialNumberLU");
Document doc = materialview.getDocumentByKey("3005");
System.out.print(doc.hasEmbedded());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
我的hasEmbedded测试语句返回 true 所以我知道有一个附件。如果它有任何好处,则此特定注释条目上的word文档命名为" C4-P0007-BRS.doc"。我已经玩过getAttachment(),getEmbeddedObjects()和getFirstItem(),但无济于事。任何帮助非常感谢。
感谢。
答案 0 :(得分:3)
附件通常嵌入在Richtext-项目中(大多数情况下)。在备忘录中,此项目的名称为“正文”。尝试使用Richtextitem的方法来获取附件。以下是设计师帮助中的示例:
RichTextItem body = (RichTextItem)doc.getFirstItem("Body");
Vector v = body.getEmbeddedObjects();
Enumeration e = v.elements();
while (e.hasMoreElements()) {
EmbeddedObject eo = (EmbeddedObject)e.nextElement();
if (eo.getType() == EmbeddedObject.EMBED_ATTACHMENT) {
eo.extractFile("c:\\extracts\\" + eo.getSource());
}
}
还有另一种可能直接从文档中提取嵌入对象,但因此您需要附件的名称。您可以使用“评估” - 声明:
获取所有附件名称Vector attachmentNames = session.evaluate("@AttachmentNames", doc);
Enumeration e = attachmentNames.elements();
while (e.hasMoreElements()) {
String attachmentName = e.nextElement();
EmbeddedObject eo = doc.getAttachment( attachmentName );
if (eo.getType() == EmbeddedObject.EMBED_ATTACHMENT) {
eo.extractFile("c:\\extracts\\" + eo.getSource());
}
}