0

プログラムで Lotus Notes データベースにアクセスして、一定期間の記録に埋め込まれた添付ファイルに関する情報を収集する方法に取り組んでいます。

私の目標は、一定期間のレコードを見つけてから、Apache-POI を使用してドキュメント サイズ、文字数などに関するメタデータを取得することです。

POI 部分は正常に動作し、これまでのところ、次のヘルプのおかげで Lotus Notes レコードにアクセスできました。

Java APIを使用した日付による蓮のメモの検索

この回答は、添付ファイルをダウンロード/コピーする方法も示しています。

Java を使用して .nsf(lotus notes) ファイルからすべての添付ファイルを取得するにはどうすればよいですか

そこから自分の POI コードを使用して仕事をし、最後にコピーした添付ファイルを削除するだけです。このアプローチは基本的に機能しますが、これらの添付ドキュメントのコピーをデータベースからコピーして保存し、最後に削除するというオーバーヘッドを回避したいと考えています。

EmbeddedObject getSource() メソッドの結果を POI コードへの入力として渡そうとしましたが、POI コードで FileNotFoundException が発生しました。

添付ファイルをコピーして保存せずに、POI に渡すことができるファイル参照を取得する方法はありますか? または、つまり、Lotus Notes EmbeddedObject 添付ファイルのファイル (+パス) を取得するのと同じくらい簡単で、どうすればよいのでしょうか?


答えを見つけたので、以下に投稿しました。

4

1 に答える 1

1

私自身の質問に答える...

...上記の質問を投稿した後、しばらくして見つけた解決策は次のとおりです。

EmbeddedObject の getInputStream が救助に...

  //from the answer in the link in the question above 
  Database db = agentContext.getCurrentDatabase();
  DocumentCollection dc = db.getAllDocuments();
  Document doc = dc.getFirstDocument();
  boolean saveFlag = false;
  while (doc != null) {
    RichTextItem body = 
    (RichTextItem)doc.getFirstItem("Body");
    System.out.println(doc.getItemValueString("Subject"));
    Vector v = body.getEmbeddedObjects();
    Enumeration e = embeddedObjs.elements();
    while(e.hasMoreElements()){
        EmbeddedObject eo = (EmbeddedObject)e.nextElement();
        if(eo.getType() == EmbeddedObject.EMBED_ATTACHMENT){

    //this next line gives Apache-POI access to the InputStream

                        InputStream is = eo.getInputStream();
            POIFSFileSystem POIfs = 
                              HWPFDocument.verifyAndBuildPOIFS(is);
            POIOLE2TextExtractor extractor = 
                              ExtractorFactory.createExtractor(POIfs);
            System.out.println("extracted text: " + extractor.getText());
                        is.close();  //closing InputStream 
                     }
                     eo.recycle();  //recycling EmbeddedObject

   //thanks to rhsatrhs for the close() and recycle() tip!
于 2012-06-14T00:22:14.283 に答える