从IBM Notes数据库中提取word文档附件

时间:2014-06-30 10:41:18

标签: java lotus-domino lotus-notes

我正在开发一个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(),但无济于事。任何帮助非常感谢。

感谢。

1 个答案:

答案 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());
        }
    }