【问题标题】:Extracting a word document attatchment from an IBM notes database从 IBM notes 数据库中提取 word 文档附件
【发布时间】:2014-08-20 17:10:00
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: java lotus-domino lotus-notes


    【解决方案1】:

    附件通常嵌入在 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());
            }
        }
    

    【讨论】:

    • 感谢您的回复,我正在运行您提供给我的最高代码,但它似乎引发了错误。 java.lang.ClassCastException:lotus.domino.local.RichTextItem 不能转换为 lotus.domino.cso.RichTextItem
    • 为什么要导入“lotus.domino.cso.RichTextItem”?有错误......你甚至不需要那个导入......
    • 您提供的第二个解决方案已经解决了问题。文件现在正在提取。非常感谢!
    • 当我使用这段代码时 RichTextItem body = (RichTextItem)doc.getFirstItem("Body");我将 body 设置为 null 。不知道为什么?
    • 请为此打开一个新问题并编写您的完整代码,这里不能帮助您
    猜你喜欢
    • 1970-01-01
    • 2013-11-27
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    相关资源
    最近更新 更多