0

我必须从 XWPFDocument 中提取所有脚注。我只找到了一个如何与 HWPFDocument 一起使用的示例。有任何想法吗?

FileInputStream fisv2 = new FileInputStream("C:\\abc.doc");
WordExtractor extractor = new WordExtractor(fisv2);
String[] fnts = extractor.getFootnoteText();
for (String s: fnts) {
  System.out.println(s + "-->\n");
}
extractor.close();
4

1 回答 1

1

XWPFWordExtractor没有像WordExtractor提供的那样提供单独提取脚注的方法。

但是XWPFDocument提供了XWPFDocument.getFootnotes,它返回一个java.util.List<XWPFFootnote>. 因此,人们可以从中得到单个脚注List

例子:

import java.io.FileInputStream;

import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.usermodel.*;

import java.util.List;
import java.util.ArrayList;

public class WordExtracFootnotes {

 public static void main(String[] args) throws Exception {

  // HWPF - binary *.doc format
  WordExtractor extractor = new WordExtractor(new FileInputStream("WordWithFootnotes.doc"));
  String[] hwpfFootnotes = extractor.getFootnoteText();
  for (String footnote : hwpfFootnotes) {
   System.out.println("[" + footnote + "]");
  }
  extractor.close();

  System.out.println();

  // XWPF - Office Open XML *.docx format
  XWPFDocument document = new XWPFDocument(new FileInputStream("WordWithFootnotes.docx"));

  List<XWPFFootnote> xwpfFootnotes = document.getFootnotes();
  for (XWPFFootnote footnote : xwpfFootnotes) {
   StringBuilder footnoteText = new StringBuilder();
   footnoteText.append("[" + footnote.getId() + ":");
   boolean first = true;
   for (XWPFParagraph paragraph : footnote.getParagraphs()) {
    if (!first) footnoteText.append("\n");
    first = false;
    footnoteText.append(paragraph.getText());
   } 
   footnoteText.append("]");
   System.out.println(footnoteText);
  }
  document.close();
 }
}

id -1 和 0 的脚注必须忽略,因为这些脚注仅供内部使用,不会在文档中引用。

于 2019-08-21T12:37:07.940 回答