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 页。

我错过了什么?

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

提前致谢

4

2 回答 2

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);
于 2014-02-12T15:35:35.503 回答
0

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

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

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

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

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

于 2015-02-19T00:24:44.803 回答