打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java准确读取word文件页数

由于本人在做一个网上打印网站,遇到了一个需求是“准确读取word文件页数,从而实现计费功能”,通过很长时间的学习、查资料后,终于解决了这个问题,因此把方法写出来,方便有同样需求的人少走弯路。

首先需要感谢kookob博主的一篇博文(http://blog.csdn.net/kookob/article/details/45038563?locationNum=3&fps=1)对我帮助很大,但里面介绍的不够完善,故在此更加细化的讲解一下,希望对大家有所帮助。

一、本人已经实验过,使用poi方法、java2word方法、itext方法等,都不能很好的读取word文件的页数,大部分问题都是读取的不准确。因为这里涉及到金钱问题,所以必须准确,所以才有了本文。

二、本文思路是“pdf格式直接读取,word格式先转pdf再读取”,由于在word转pdf时需要一些时间,我们开发者如果单单用进度条,当word较大时,会造成转的太慢,所以我在我的网站(已上线)中,在用户“选择文件”后,后台开始转格式,此时不让用户看到,而去让用户做一些配置,比如打印的份数、是否双面打印等,用户设置完了,在最后的结算页面显示“正在读取格式”的进度条,然后再显示“正在计算金额”,这样用户体验会更好。

三、下面将一步步实现准确读取word页数:

3.1 准备工作:

3.1.1开发环境:windows。请务必在windows操作系统中进行本操作,因为word需要在服务器上转为pdf。

3.1.2 请在电脑上安装word,注意是安装word,不是安装wps。

3.1.3 请在电脑上安装word转pdf的插件:“软件名:SaveAsPDFandXPS”,下载地址:http://download.csdn.net/download/tiandixuanwuliang/10006993

3.1.4 请把系统需要调用的dll文件放置在java环境的jre的bin目录下,例如:‪E:\software\java\jre7\bin\jacob-1.18-x64.dll,(请注意自己电脑32位还是64位)下载地址:http://download.csdn.net/download/tiandixuanwuliang/10007003

3.1.5 java环境jdk1.7

3.2 word转pdf:

3.2.1新建java工程,把jacob.jar添加到工程中,此jar包在3.1.4节下载的文件夹里面有。

同时把jacob.jar文件拷贝一份放到C:/windows/system32下

如图:


3.2.2Word2PdfUtil.java代码如下:

  1. <span style="font-size: 18px;">package testJavaReadWordpage;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import com.jacob.activeX.ActiveXComponent;  
  7. import com.jacob.com.Dispatch;  
  8.   
  9. public class Word2PdfUtil {  
  10.   
  11.     static final int wdDoNotSaveChanges = 0;// 不保存待定的更改。  
  12.     static final int wdFormatPDF = 17;// word转PDF 格式  
  13.   
  14.     public static boolean word2pdf(String source, String target) {  
  15.         System.out.println("Word转PDF开始启动...");  
  16.         long start = System.currentTimeMillis();  
  17.         ActiveXComponent app = null;  
  18.         try {  
  19.             app = new ActiveXComponent("Word.Application");  
  20.             app.setProperty("Visible"false);  
  21.             Dispatch docs = app.getProperty("Documents").toDispatch();  
  22.             System.out.println("打开文档:" + source);  
  23.             Dispatch doc = Dispatch.call(docs, "Open", source, falsetrue).toDispatch();  
  24.             System.out.println("转换文档到PDF:" + target);  
  25.             File tofile = new File(target);  
  26.             if (tofile.exists()) {  
  27.                 tofile.delete();  
  28.             }  
  29.             Dispatch.call(doc, "SaveAs", target, wdFormatPDF);  
  30.             Dispatch.call(doc, "Close"false);  
  31.             long end = System.currentTimeMillis();  
  32.             System.out.println("转换完成,用时:" + (end - start) + "ms");  
  33.             return true;  
  34.         } catch (Exception e) {  
  35.             System.out.println("Word转PDF出错:" + e.getMessage());  
  36.             return false;  
  37.         } finally {  
  38.             if (app != null) {  
  39.                 app.invoke("Quit", wdDoNotSaveChanges);  
  40.             }  
  41.         }  
  42.     }  
  43.   
  44. }</span>  
注意:请在e盘下放一个test.doc的word文件,经过上面代码,转换成功显示如下:


3.3开始读取pdf:

3.3.1先请导入java读取pdf文件页码的jar,下载地址:http://download.csdn.net/download/tiandixuanwuliang/10007010

3.3.2代码如下:

  1. <span style="font-size: 18px;">package testJavaReadWordpage;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import com.itextpdf.text.pdf.PdfReader;  
  6.   
  7. public class GetPdfpage {  
  8.     public static int getPdfPage(String filepath){  
  9.         int pagecount = 0;    
  10.         PdfReader reader;  
  11.         try {  
  12.             reader = new PdfReader("e:\\test1.pdf");  
  13.             pagecount= reader.getNumberOfPages();   
  14.         } catch (IOException e) {  
  15.             e.printStackTrace();  
  16.         }  
  17.         System.out.println(pagecount);  
  18.         return pagecount;  
  19.     }  
  20. }</span>  
注:读取成功如下:


3.4总结:利用java准确读取word页码,采用先把word转为pdf,再读取pdf页码的方式,经过测试,本方法得到的word页码准确率为100%

【项目工程】:http://download.csdn.net/download/tiandixuanwuliang/10007015

注:虽说代码看起来不难,但是本人也是研究了大半个月才找出了这个方法,其中下载了很多无用的资源,尝试了很多方法,故本文中有些工具、工程都设置了下载分数,也恳请大家理解,希望大家多多支持,本人将尽己所能写出更好的博文。

四、如果有错误,请看下面:

4.1如果报错:java.lang.UnsatisfiedLinkError: no jacob-1.14-x86 in java.library.path说明是jacob.dll文件错误,可能是位数错误,请把64位的换成32的;还有可能是jacob.dll放的位置有问题,具体请看:http://blog.csdn.net/li346985170/article/details/38365889

4.2如果报错:Unsupported major.minor version 51.0,是jdk版本错误,请用jdk1.7及以上,具体方法请看:https://jingyan.baidu.com/article/bea41d437363bdb4c51be6e3.html

4.3如果程序一直不能转成功,请检查,电脑是否安装了word,是否安装了转pdf的插件。另外,还可以,把jacod.all和jacod.jar两个文件在jre的bin、jdk的bin和C:\Windows\System32下到处放,但是要注意是32位还是64位(有时候调用可以有问题,本人对java底层不太熟悉,反正经过这些操作,就可以转pdf成功了)。

4.4如果报错:Could not initialize class com.jacob.activeX.ActiveXComponent请把jacob.jar文件拷贝到C:/windows/System32中

五、本人使用上述方法,成功准确地获取了word页码,本人能力有限错误地方,欢迎大家批评指正;或者大家有更好的办法,或者大家在操作过程中遇到任何问题,都欢迎在评论区留言。

本文链接:http://blog.csdn.net/tiandixuanwuliang/article/details/71298406

请选中你要保存的内容,粘贴到此文本框
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
jacob 将word,excel 转pdf
java将Word/Excel/PDF文件转换成HTML整理
java 操作office_Java操作word的方法
图片格式的PDF转换为WORD的技巧
PDF如何转为WORD
jacob(word)包括java.dll,jacob.jar下载及相关操作!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服