Java 计算Word文档中的页数

Java 计算Word文档中的页数,java,ms-word,apache-poi,.doc,Java,Ms Word,Apache Poi,.doc,我试图用java计算word文档中的页面数 这是我的实际代码,我正在使用ApachePOI库 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 FileIn

我试图用java计算word文档中的页面数

这是我的实际代码,我正在使用ApachePOI库

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);
}
这并不是我所期望的,因为前三个文档的页长是4页,另一个是1到5页

我错过了什么

我是否必须使用另一个库来正确计算页数


提前感谢

这可能会对您有所帮助。它计算表单提要的数量(有时用于分隔页面),但我不确定它是否适用于所有文档(我想不会)

WordExtractor-extractor=新的WordExtractor(文档);
String[]段落=提取器.getParagraphText();
int pageCount=1;
对于(int i=0;i<段落长度;++i){
如果(段落[i].indexOf(“\f”)>=0){
++页面计数;
}
}
系统输出打印项次(页面计数);

这是Word的某些版本(显然是2010年以前的版本,可能只是在Word 9.0 aka 2000中)或至少是用于计算页面数的COM预览程序的某些版本中的一个错误。apache开发人员拒绝为其实施解决方案:

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

这就是元数据仅在打开和编辑文件时由字处理程序更新的原因。如果您指示Word 2010以“只读”方式打开文件(这是因为它是从internet下载的),则会在页面列中显示“”。见第二张截图。所以很明显,这个文件中有一个bug,而不是TIKA或POI的问题

我还发现该漏洞(Word 9.0/2000)已由MS确认:


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

听起来Word似乎没有费心更新文件中的统计信息(令人沮丧的是,这很常见)。如果你在word中打开文件,查看统计数据,然后保存,这样可以修复它吗?现在可以了吗?用poi-3.9版本测试它,它确实对我有用。谢谢,问题解决了吗?你能告诉我你是如何计算页数的吗?@MuneemHabib不,我没有解决这个问题。它实际上与文档元数据一起工作,如果Word不更新它,您将无法获取页数。@反斜杠我有一个offest值,我想获取页码,这个偏移量在哪里?
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);