由于本人在做一个网上打印网站,遇到了一个需求是“准确读取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代码如下:

packagetestJavaReadWordpage;

importjava.io.File;

importjava.io.IOException;

importcom.jacob.activeX.ActiveXComponent;

importcom.jacob.com.Dispatch;

publicclassWord2PdfUtil {

staticfinalintwdDoNotSaveChanges =0;// 不保存待定的更改。

staticfinalintwdFormatPDF =17;// word转PDF 格式

publicstaticbooleanword2pdf(String source, String target) {

System.out.println("Word转PDF开始启动...");

longstart = System.currentTimeMillis();

ActiveXComponent app = null;

try{

app = newActiveXComponent("Word.Application");

app.setProperty("Visible",false);

Dispatch docs = app.getProperty("Documents").toDispatch();

System.out.println("打开文档:"+ source);

Dispatch doc = Dispatch.call(docs, "Open", source,false,true).toDispatch();

System.out.println("转换文档到PDF:"+ target);

File tofile = newFile(target);

if(tofile.exists()) {

tofile.delete();

}

Dispatch.call(doc, "SaveAs", target, wdFormatPDF);

Dispatch.call(doc, "Close",false);

longend = System.currentTimeMillis();

System.out.println("转换完成,用时:"+ (end - start) +"ms");

returntrue;

} catch(Exception e) {

System.out.println("Word转PDF出错:"+ e.getMessage());

returnfalse;

} finally{

if(app !=null) {

app.invoke("Quit", wdDoNotSaveChanges);

}

}

}

}注意:请在e盘下放一个test.doc的word文件,经过上面代码,转换成功显示如下:

3.3开始读取pdf:

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

3.3.2代码如下:

packagetestJavaReadWordpage;

importjava.io.IOException;

importcom.itextpdf.text.pdf.PdfReader;

publicclassGetPdfpage {

publicstaticintgetPdfPage(String filepath){

intpagecount =0;

PdfReader reader;

try{

reader = newPdfReader("e:\\test1.pdf");

pagecount= reader.getNumberOfPages();

} catch(IOException e) {

e.printStackTrace();

}

System.out.println(pagecount);

returnpagecount;

}

}注:读取成功如下:

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

请选中你要保存的内容,粘贴到此文本框

Java获取文档页数_java准确读取word文件页数相关推荐

  1. java准确读取word文件页数

    转自:https://blog.csdn.net/tiandixuanwuliang/article/details/71298406 由于本人在做一个网上打印网站,遇到了一个需求是"准确读 ...

  2. 【Java wrod文档导出 返回浏览器下载读取word文档】文档流转IO流

    在工作当中会有很多奇奇怪怪的需求 比如把数据库数据 导出word文档,在此之前发表过一篇 导出ecxle表格的文章,经过查询资料 发现还是很容易实现的 . 我们一共可以分为两个部分 一.把数据库的数据 ...

  3. python获取文档的真实创建时间(word、excel、ppt、pdf、图片)

    审题 首先, 文档的新建时间和文件的新建时间是不一致的. 文档的新建时间和文件的新建时间是不一致的. 文档的新建时间和文件的新建时间是不一致的. 文档的新建时间是和文件没有关系的(对word来说就是新 ...

  4. Java获取文档页数_获取PDF文档中的页数

    一个简单的命令行可执行文件,名为:pdfinfo . 这是downloadable for Linux and Windows . 您下载包含几个与PDF相关的小程序的压缩文件 . 在某处提取它 . ...

  5. java怎么给文档加水印_Java 如何给Word文档添加多行文字水印

    前言 我在以往的文章中曾介绍过如何给Word文档添加文本水印和图片水印,及怎样删除文档中的水印.关于文本水印,之前那篇教程里主要指的是单行字体的水印,而在操作Word文档时,有时也会碰到需要添加多行文 ...

  6. java 接口文档的格式化_Java Word API - 读写转换处理DOC DOCX HTML PDF HTML格式

    Java Word 文档处理API 先进功能 执行邮件合并 使用邮件合并生成报表 插入格式户文本,段落,图像,表格以及其他内容到Word文档中 使用数据库的检索数据填充到Word文档中的表格 创建邮件 ...

  7. java读取word文档的复杂表格_poi读取word表格 java POI 如何读取word的表格中的表格...

    poi 操作word 2007 (如何删除word中的某一个表格)小编忘了哪年哪月的哪日小编在哪面墙上刻下张脸张微笑着忧伤着凝望小编的脸. public static void changeTable ...

  8. 使用Java实现文档的下载(Excel,Word文档等)

    实现文档的下载 前端页面 1.在前端页面中访问后端控制层方法,传值(此处无需传参数) //下载Excel模板 监听table中的toolbar table中必须定义 lay-filter='downl ...

  9. Microsoft Word文档续表设置方法,word跨页表格拆分方法

    一般如果一个表格跨了两页,一般规范的要求就是要加续表. 文档加入续表方法 下图所示就是表格跨页的情景. 步骤一:选中下面的一行表,右键点击拆分表格就好了. 注:注意跟拆分单元格的区别. 步骤二:在右边 ...

最新文章

  1. Ubuntu下如何解压缩zip,tar,tar.gz,tar.bz2文件
  2. 随着加密货币市场稳定 比特币价格不可避免的会下降
  3. 2.3 《计算机组成原理》之浮点数的表示(基本格式、规格化[左规右规]、表示范围、IEEE754标准详解)
  4. Raspbian 源替换
  5. NBR100多IP出口解决方案的配置方法
  6. nginx 正向代理_看这篇彻底认识Nginx!
  7. html文本添加超链接就换行,HTML - SegmentFault 思否
  8. 爬虫日记-采集 快代理 免费 代理ip 并 清洗 ip 附源码gitee,可运行
  9. 用puttygen工具把私钥id_rsa转换成公钥id_rsa.ppk
  10. Python 处理 PDF 的神器 -- PyMuPDF(下)
  11. latex中report目录_LaTeX提纲
  12. win10计算器_你所不知道的 Windows 10 小诀窍:万能计算器、虚拟键盘、屏幕截图标注...
  13. 适合php编程的笔记本电脑,【求推荐】(女生用/编程) 的 笔记本(Thinkpad) - 笔记本电脑(Notebook)版 - 北大未名BBS...
  14. eclipse报错 错误: 找不到或无法加载主类
  15. Handlebars.js入门教程
  16. 用手机UC浏览器页面打开vue项目,图片,css,js都没加载
  17. 【七里香】雨下整夜 我的爱溢出就像雨水
  18. android 权限模型,android-棉花糖权限模型在Airbnb中的AccountManager getAccounts()异常,该怎么做?...
  19. 新加坡金融科技节 | 蚂蚁金服CTO程立:面向全球开放,与合作伙伴共赢
  20. 【C语言】判断三角形形状

热门文章

  1. 做一个公司官方网站要多少钱?怎么去做呢?
  2. 量化择时:基于经验模态分解的希尔伯特-黄变换(一)数理
  3. Android 面试必备 - 知识图谱
  4. 熊猫绘画2021.6
  5. 好文荐读 | 2019,沉默的链游
  6. 网速变慢、不稳定?请自查一下,物联卡apn设置你是这样设置的吗
  7. cubemx 读卡器_STM32CubeMX+Keil实现 STM32F4 SDcard+SPI Flash读卡器
  8. 修正了标准工时软件的一个BUG
  9. 亿级曝光品牌视频的幕后设定 1
  10. 1507四舍五入c语言,Excel工作表中的“四舍五入”都不掌握,还敢称Excel达人?