0

Office ファイル (doc、docx、xls、xlsx、ppt、pptx、...) に埋め込まれたすべてのオブジェクト (doc、...、txt) を一覧表示する機会はありますか?

Office ファイルからテキストを抽出するために、Apache POI (Java) ライブラリを使用しています。埋め込まれたオブジェクトからすべてのテキストを抽出する必要はありません。埋め込まれたすべてのドキュメントのファイル名を含むログ ファイルがあればよいでしょう (: のようなものstring objectFileNames = getEmbeddedFileNames(fileInputStream))。

例: 「excel.xls」という別のファイルを含む Word 文書「test.doc」があります。Excel.xls(今回の場合)のファイル名をログファイルに書き込みたいです。

Apache ホームページ ( https://poi.apache.org/text-extraction.html )のサンプル コードを使用してこれを試しました。しかし、私のコードは常に同じものを返します (「フッター テキスト: ヘッダー テキスト」)。

私が試したのは:

private static void test(String inputfile, String outputfile) throws Exception {

    String[] extractedText = new String[100];
    int emb = 0;//used for counter of embedded objects

    InputStream fis = new FileInputStream(inputfile);
    PrintWriter out = new PrintWriter(outputfile);//Text in File (txt) schreiben

System.out.println("Emmbedded Search started. Inputfile: " + inputfile);

//Based on Apache sample Code
emb = 0;//Reset Counter

POIFSFileSystem emb_fileSystem = new POIFSFileSystem(fis);
// Firstly, get an extractor for the Workbook
POIOLE2TextExtractor oleTextExtractor = 
   ExtractorFactory.createExtractor(emb_fileSystem);
// Then a List of extractors for any embedded Excel, Word, PowerPoint
// or Visio objects embedded into it.
POITextExtractor[] embeddedExtractors =
   ExtractorFactory.getEmbededDocsTextExtractors(oleTextExtractor);

for (POITextExtractor textExtractor : embeddedExtractors) {
   // If the embedded object was an Excel spreadsheet.
   if (textExtractor instanceof ExcelExtractor) {
      ExcelExtractor excelExtractor = (ExcelExtractor) textExtractor;
      extractedText[emb] = (excelExtractor.getText());
   }
   // A Word Document
   else if (textExtractor instanceof WordExtractor) {
      WordExtractor wordExtractor = (WordExtractor) textExtractor;
      String[] paragraphText = wordExtractor.getParagraphText();
      for (String paragraph : paragraphText) {
          extractedText[emb] = paragraph;
      }
      // Display the document's header and footer text
      System.out.println("Footer text: " + wordExtractor.getFooterText());
      System.out.println("Header text: " + wordExtractor.getHeaderText());
   }
   // PowerPoint Presentation.
   else if (textExtractor instanceof PowerPointExtractor) {
      PowerPointExtractor powerPointExtractor =
         (PowerPointExtractor) textExtractor;
      extractedText[emb] = powerPointExtractor.getText();
      emb++;
      extractedText[emb] =  powerPointExtractor.getNotes();
   }
   // Visio Drawing
   else if (textExtractor instanceof VisioTextExtractor) {
      VisioTextExtractor visioTextExtractor = 
         (VisioTextExtractor) textExtractor;
      extractedText[emb] = visioTextExtractor.getText();
   }
   emb++;//Count Embedded Objects
}//Close For Each Loop POIText...

for(int x = 0; x <= extractedText.length; x++){//Write Results to TXT
    if (extractedText[x] != null){
        System.out.println(extractedText[x]);
        out.println(extractedText[x]);
    }
    else {
        break;
    }
}
out.close();

}

入力ファイルは、doc ファイルをオブジェクトとして含む xls で、出力ファイルは txt です。

誰かが私を助けることができればありがとう。

4

2 に答える 2