java读取word文件页数
最近在做一个word转html的小功能,需要用到事先获得word文件的页数来判断是否要进行转换。我从网上搜了下,发现大多数文章都写的是错误的,这里来汇总下,正确的文章我会直接放链接,毕竟那是别人的劳动成果,希望大家都支持原作者。
错误的方式汇总
1、使用Apache POI
该方式代码我就不详细贴了,只贴回来获取页数那一行:
int pages = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();//总页数
这个pages基本上是错误的,所以大家不要去用。
2、使用jacob
该方法我会贴详细代码,但是请注意,这个工具大概只适用于10页以内的文档,10页以上读出来的页数基本就是错的。
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public static void main(String[] args) {
String filePath = "F:\\temporaryFile\\japp-upload\\elec\\clause\\S1250-0001\\S1250-0001.docx";// word文档所在路径
// 建立ActiveX部件
ActiveXComponent wordCom = new ActiveXComponent("Word.Application");
//word应用程序不可见
wordCom.setProperty("Visible", false);
// 返回wrdCom.Documents的Dispatch
Dispatch wrdDocs = wordCom.getProperty("Documents").toDispatch();//Documents表示word的所有文档窗口(word是多文档应用程序)
// 调用wrdCom.Documents.Open方法打开指定的word文档,返回wordDoc
Dispatch wordDoc = Dispatch.call(wrdDocs, "Open", filePath, false, true, false).toDispatch();
Dispatch selection = Dispatch.get(wordCom, "Selection").toDispatch();
int pages = Integer.parseInt(Dispatch.call(selection,"information",4).toString());//总页数 //显示修订内容的最终状态
System.out.println(pages);
//关闭文档且不保存
Dispatch.call(wordDoc, "Close", new Variant(false));
//退出进程对象
wordCom.invoke("Quit", new Variant[] {});
}
3、使用Spire.Doc
免费版的缺陷,免费版的解析doc/docx文档,读出文档页数很玄幻,页数是真正的页数±1,而且它的免费版只能处理word文档35页以内的内容,35页以上的文档,永远只处理前35页……我去咨询了这个工具的销售,贵!跟我领导讲了价格,领导不同意购买。所以我也不知道付费版的这个功能有没有改善。
但是有一说一,这个工具还挺强大的,处理各种文档都可,就一个字,贵!贫穷使我们相遇,它的jar包很大很大,运行速度有点慢。免费版的还挺香的哈哈
这里附上Spire.Doc的官网word文件操作说明以及非常简单的代码
https://www.e-iceblue.cn/spiredocforjavaconversion/convert-word-to-png-in-java.html
//创建Document对象
Document doc = new Document();
//加载Word文档
doc.loadFromFile(docPath);
int page = doc.getPageCount();
正确的方式
java准确读取word文件页数
https://blog.csdn.net/tiandixuanwuliang/article/details/71298406
思路是:使用pdf格式读取页数,word格式先转pdf再读取。