Как использовать Apache HWPF для извлечения текста и изображений из файла DOC - PullRequest
3 голосов
/ 12 марта 2009

Я скачал Apache HWPF . Я хочу использовать его для чтения файла документа и записи его текста в простой текстовый файл. Я не очень хорошо знаю HWPF.

Моя очень простая программа здесь:

У меня сейчас 3 проблемы:

  1. В некоторых пакетах есть ошибки (они не могут найти apache hdf). Как я могу их исправить?

  2. Как я могу использовать методы HWDF для поиска и извлечения изображений?

  3. Некоторая часть моей программы неполная и неправильная. Поэтому, пожалуйста, помогите мне завершить его.

Я должен завершить эту программу за 2 дня.

еще раз повторяю Пожалуйста, пожалуйста, помогите мне завершить это.

Большое спасибо, ребята, за помощь !!!

Это мой элементарный код:

public class test {
  public void m1 (){
    String filesname = "Hello.doc";
    POIFSFileSystem fs = null;
    fs = new POIFSFileSystem(new FileInputStream(filesname ); 
    HWPFDocument doc = new HWPFDocument(fs);
    WordExtractor we = new WordExtractor(doc);
    String str = we.getText() ;
    String[] paragraphs = we.getParagraphText();
    Picture pic = new Picture(. . .) ;
    pic.writeImageContent( . . . ) ;
    PicturesTable picTable = new PicturesTable( . . . ) ;
    if ( picTable.hasPicture( . . . ) ){
      picTable.extractPicture(..., ...);
      picTable.getAllPictures() ;
    }
}

Ответы [ 4 ]

1 голос
/ 02 мая 2011

Apache Tika сделает это за вас. Он обрабатывает взаимодействие с POI для выполнения HWPF и предоставляет вам либо XHTML, либо обычный текст для содержимого файла. Если вы зарегистрируете рекурсивный анализатор, вы также получите все встроенные изображения.

0 голосов
/ 07 ноября 2014
    //you can use the org.apache.poi.hwpf.extractor.WordExtractor to get the text
    String fileName = "example.doc";
    HWPFDocument wordDoc = new HWPFDocument(new FileInputStream(fileName));
    WordExtractor extractor = new WordExtractor(wordDoc);
    String[] text = extractor.getParagraphText();
    int lineCounter = text.length;
    String articleStr = ""; // This string object use to store text from the word document.
    for(int index = 0;index < lineCounter;++ index){
        String paragraphStr = text[index].replaceAll("\r\n","").replaceAll("\n","").trim();
        int paragraphLength = paragraphStr.length();
        if(paragraphLength != 0){
            articleStr.concat(paragraphStr);
        }
    }
    //you can use the org.apache.poi.hwpf.usermodel.Picture to get the image
    List<Picture> picturesList = wordDoc.getPicturesTable().getAllPictures();
    for(int i = 0;i < picturesList.size();++i){
        BufferedImage image = null;
        Picture pic = picturesList.get(i);
        image = ImageIO.read(new ByteArrayInputStream(pic.getContent()));
        if(image != null){
            System.out.println("Image["+i+"]"+" ImageWidth:"+image.getWidth()+" ImageHeight:"+image.getHeight()+" Suggest Image Format:"+pic.suggestFileExtension());
        }
    }
0 голосов
/ 01 мая 2011

Я знаю это намного позже, чем факт, но я нашел TextMining в коде Google, более точный и очень простой в использовании Это, однако, в значительной степени заброшенный код.

0 голосов
/ 12 марта 2009

Если вы просто хотите это сделать, и вас не волнует кодирование, вы можете просто использовать Antiword .

$ antiword file.doc> out.txt

...