2013-05-08 2 views
3

Я пытаюсь подсчитать страницы из словаря с помощью java.Подсчет страниц в документе Word

Это мой фактический код, я использую библиотеки Apache POI

String path1 = "E:/iugkh"; 
File f = new File(path1); 
File[] files = f.listFiles(); 
int pagesCount = 0; 
for (int i = 0; i < files.length; i++) { 
    POIFSFileSystem fis = new POIFSFileSystem(new FileInputStream(files[i])); 
    HWPFDocument wdDoc = new HWPFDocument(fis); 
    int pagesNo = wdDoc.getSummaryInformation().getPageCount(); 
    pagesCount += pagesNo; 
    System.out.println(files[i].getName()+":\t"+pagesNo); 
} 

Выход является:

ten.doc: 1 
twelve.doc: 1 
nine.doc: 1 
one.doc: 1 
eight.doc: 1 
4teen.doc: 1 
5teen.doc: 1 
six.doc: 1 
seven.doc: 1 

И это не то, что я ожидал, как первые три документа длина страницы равна 4, а другая - от 1 до 5 страниц.

Что мне не хватает?

Должен ли я использовать другую библиотеку для правильного подсчета страниц?

Заранее благодарен

+1

Похоже, что Word не потрудился обновлять статистику в файлах (удручающе распространенный). Если вы откроете файл в слове, просмотрите статистику и сохраните, это исправить? – Gagravarr

+0

Это работает сейчас? протестировал его с версией poi-3.9, это сработало для меня. Спасибо – teckysols

+0

у вас проблема разрешена? можете ли вы рассказать мне, как вы получаете количество страниц? –

ответ

2

Это может вам помочь. Он подсчитывает количество фидов форм (иногда используется для разделения страниц), но я не уверен, что он будет работать для всех документов (я думаю, это не так).

WordExtractor extractor = new WordExtractor(document); 
String[] paragraphs = extractor.getParagraphText(); 

int pageCount = 1; 
for (int i = 0; i < paragraphs.length; ++i) { 
    if (paragraphs[i].indexOf("\f") >= 0) { 
     ++pageCount; 
    } 
} 

System.out.println(pageCount); 
0

Это увы является ошибкой в ​​некоторых версиях Word (до 2010 версии, по-видимому, возможно только в слове 9.0 акой 2000) или, по крайней мере, в некоторых версиях COM просмотрщика, который используется для подсчета страниц. Апач разработчики отказались реализовать обходной путь для этого: https://issues.apache.org/jira/browse/TIKA-1523

В самом деле, когда вы открываете файл в Word, он, конечно, показывает реальные страницы, и это также пересчитывает количество, но первоначально он также показывает «1» , Но здесь метаданные, сохраненные в файле, просто «1» или, может быть, ничего (см. Ниже). POI не «переплачивает» макет, чтобы рассчитать эту информацию.

Именно поэтому метаданные обновляются программой обработки слова при открытии и редактировании файла. Если вы укажете Word 2010, чтобы открыть файл «только для чтения» (который он делает, потому что он загружен из Интернета), он показывает «» в столбце страницы. См. Второй снимок экрана. Настолько явная ошибка в этом файле, а не проблема TIKA или POI.

Я также нашел там, что ошибка (для слова 9.0/2000) была подтверждена с помощью МС: http://support.microsoft.com/kb/212653/en-us

Если открытие и повторно закрывающиеся с новой версией Слова не возможно/возможно, другой обходным путем было бы скрытие документов в формате pdf (или даже xps) и подсчет страниц.

Смежные вопросы