计算Word文档中的页面

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

我错过了什么?

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

提前致谢

这可能对你有所帮助。 它计算了换页的数量(有时用于分隔页面),但我不确定它是否适用于所有文档(我猜它没有)。

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

这可能是一些版本的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的问题。

我还在那里发现了这个错误(对于Word 9.0 / 2000)是由MS确认的: http : //support.microsoft.com/kb/212653/en-us

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