计算Word文档中的页面

时间:2013-05-08 13:43:54

标签: java ms-word apache-poi .doc

我正在尝试使用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页。

我缺少什么?

我是否必须使用其他库来正确计算页数?

提前致谢

2 个答案:

答案 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);

答案 1 :(得分:0)

这可能是某些版本的Word(2010年之前的版本,可能只是在Word 9.0中称为2000)或者至少在用于计算页面的COM预览器的某些版本中的错误。 apache开发人员拒绝为其实施解决方法:https://issues.apache.org/jira/browse/TIKA-1523

  

事实上,当您在Word中打开文件时,它当然会显示真实页面,并且还会重新计算计数,但最初它也会显示“1”。但是在这里,保存在文件中的元数据只是“1”或者没有(见下文)。 POI不会“重排”布局来计算该信息。

     

这就是为什么元数据仅在打开和编辑文件时由文字处理程序更新。如果您指示Word 2010打开文件“只读”(它因为从Internet下载而执行),它会在页面列中显示“”。见第2截图。很明显这个文件中的一个错误,不是TIKA或POI的问题。

我还在那里发现MS({3}}

确认了错误(Word 9.0 / 2000)

如果无法使用新版本的Word打开和重新关闭,另一种解决方法是将文档转换为pdf(甚至是xps)并计算其页面。