Java程序实现Word文档转为pdf以及出现的问题解决
做兽医项目需要用到这种需求,很多程序员都遇到过,有些word文档希望直接在浏览器中打开进行预览,但是浏览器往往不是很配合,直接就提示下载,不像pdf文档,浏览器可以直接进行预览。
1. Word文档转为pdf直接上代码:
import java.io.File;import org.apache.poi.POIXMLDocument;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class Word2pdf { static final int wdFormatPDF = 17;// PDF 格式 public int wordToPDF(String sfileName,String toFileName) throws Exception{ System.out.println("启动Word..."); long start = System.currentTimeMillis(); ActiveXComponent app = null; Dispatch doc = null; try { app = new ActiveXComponent("Word.Application"); // 设置word不可见app.setProperty("Visible", new Variant(false)); // 打开word文件Dispatch docs = app.getProperty("Documents").toDispatch();
// doc = Dispatch.call(docs, "Open" , sourceFile).toDispatch(); doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] { sfileName, new Variant(false),new Variant(true) }, new int[1]).toDispatch();System.out.println("打开文档..." + sfileName); System.out.println("转换文档到PDF..." + toFileName); File tofile = new File(toFileName); // System.err.println(getDocPageSize(new File(sfileName)));if (tofile.exists()) { tofile.delete(); }
// Dispatch.call(doc, "SaveAs", destFile, 17); // 作为html格式保存到临时文件::参数 new Variant(8)其中8表示word转html;7表示word转txt;44表示Excel转html;17表示word转成pdf。。Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] { toFileName, new Variant(17) }, new int[1]); long end = System.currentTimeMillis(); System.out.println("转换完成..用时:" + (end - start) + "ms."); } catch (Exception e) { e.printStackTrace(); System.out.println("========Error:文档转换失败:" + e.getMessage()); }catch(Throwable t){t.printStackTrace();} finally { // 关闭wordDispatch.call(doc,"Close",false); System.out.println("关闭文档"); if (app != null) app.invoke("Quit", new Variant[] {}); } //如果没有这句话,winword.exe进程将不会关闭 ComThread.Release(); return 1;} private static Document read(File xmlFile) throws DocumentException {SAXReader saxReader = new SAXReader();return saxReader.read(xmlFile);}
// public String getDocPageSize(File file){
// String pages = null;
// try{
// Document doc = read(file);
// List<Node> nodes = doc.selectNodes("//o:Pages");
// if(nodes != null && nodes.size() > 0){
// pages = nodes.get(0).getText();
// System.out.println("/");
// System.out.println("该word文档的页数为:"+Integer.parseInt(pages));
// System.out.println("/");
// }else{
// System.out.println("*********");
// System.out.println("页面转换错误");
// System.out.println("*********");
// }
// }catch(Exception ex){
// ex.printStackTrace();
// }
// return pages;
// }public int getDocPageSize(String filePath) throws Exception {XWPFDocument docx = new XWPFDocument(POIXMLDocument.openPackage(filePath));int pages = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();//总页数int wordCount = docx.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters();// 忽略空格的总字符数 另外还有getCharactersWithSpaces()方法获取带空格的总字数。 System.out.println ("pages=" + pages + " wordCount=" + wordCount);return pages;}public static void main(String[] args) throws Exception { Word2pdf d = new Word2pdf(); System.err.println(d.getDocPageSize("d:\\exportWord.docx"));d.wordToPDF("d:\\exportWord.docx", "d:\\law.pdf"); } }
可是能够完全运行的应该不可能,还要准备工作,
出错总结:
1.没引入jar包,,这个错误我就不说了,,基本上所有人都可以避免.jacob.jar
2.
出现这个错误是因为缺少了jacob-1.17-x64.dll这个东西,,把jacob.dll(不同版本的jacob的dll文件名有所不同)复制到C:\Program Files\Java\jdk1.6.0_17\jre\bin(项目中用到的jre)目录下即可。
注意:名字一定要改成和报错的时候一样的名字,差一点也不行。
3.由于出错没有截图,所以现在错误也不好去演示了,,简单的就是下面的错误
com.jacob.com.ComFailException: Invoke of: SaveAs
Source: Microsoft Word
Description: 命令失败
出现这种错误网上也有很多解决办法:如下
Office版本使用2007,因为2007提供了一个加载项:Microsoft Save as PDF 或 XPS,可将文档另存为PDF格式。下载地址:http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=4D951911-3E7E-4AE6-B059-A2E79ED87041,安装即可使用。
4.最后一步,
d.wordToPDF("d:\\exportWord.docx", "d:\\law.pdf");
这个目录一定要写正确,如果你写成d:\\pdf\\law.pdf,而d盘中又没有pdf文件夹,则会报如下错误
<img src="https://img-blog.csdn.net/20161027104907109?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
避免上面4种错误,则能够万无一失了,,还有jar和dll文件版本要对应。。由于我没出现这个错误,不过网上有人出过,,注意下就可以了。
Java程序实现Word文档转为pdf以及出现的问题解决相关推荐
- 怎么将word文档转为pdf
很多人问我怎么将word文档转为pdf,用程序,这个就是 package com.zms.office2pdf; import jp.ne.so_net.ga2.no_ji.jcom.IDispatc ...
- word文档转为PDF以及多种文档格式转换
word文档转为PDF以及多种文档格式转换 项目地址:https://gitee.com/Jakewabc/word-of-pdf.git 相关案例: https://github.com/aspos ...
- Jacob Java程序把Word文档直接转换成Html文件
2019独角兽企业重金招聘Python工程师标准>>> Jacob是Java和Windows下的Com桥,通过它我们可以在Java程序中调用COM组件.如果你的JDK是1.4,那你需 ...
- doc转pdf java不失真_java使用Aspose实现 word文档转pdf文件高效不失真
java使用Aspose word文档转pdf功能实现 主要步骤 使用Aspose进行文档转换,首先引入相应的jar包到系统环境 项目resource下导入license.xml文件 使用Aspose ...
- Word文档或PDF转图片
首先把Word文档转为pdf,方法网上很多,比如用jacob.poi.pdfbox.xpdf.OpenOffice+JodConverter(Openoffice)等. 现在主要讲pdf转图片方法: ...
- Word处理控件Aspose.Words功能演示:使用 Android 库将 Word 文档转换为 PDF
Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word.此 ...
- Java 将 Word 文档转换为 PDF 的完美工具
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:为什么魂斗罗只有 128 KB却可以实现那么长的剧情?个人原创+1博客:点击前往,查看更多 来源:https:/ ...
- azw3转换为pdf_干货:如何Java 将 Word 文档转换为 PDF
在日常工作中,PDF格式良好的视觉阅读性和稳定性使其使用越来越广泛.因此我们常会遇到需要将成型的Word文档转换为PDF格式的情况.本文就将通过使用Java程序来演示如何将Word文档转换成PDF格式 ...
- Java将Word文档转换为PDF的完美工具
引用至:https://mp.weixin.qq.com/s/JIgo3f98HufGJx23mgtvag Java 将 Word 文档转换为 PDF 的完美工具 在日常工作中,PDF格式良好的视觉阅 ...
最新文章
- 51nod 最长公共子序列测试 【LCS+回溯】
- [CF1076E]Vasya and a Tree
- 使用jsoup解析html
- 一文带你了解腾讯位置服务的开发与接入
- 《梦断代码》阅读笔记之第8章至最后
- java入门编程(菜鸟教程)
- 华硕固件默认ip_斐讯刷华硕固件后开启QOS限速的方法
- 计数器matlab,MATLAB中的几个时间计数器
- 计算机协会取消信息学奥赛,15万人参加的信息学奥赛停了 学生咋办家长咋看?...
- 一位企业家的成功之道
- 几款常见的可视化HTML编辑器(WYSIWYG)
- 题解 CF32C 【Flea】
- 卜算子.咏梅 英文版
- 东航电商前端技术周刊第一期20180601
- 【PTA 7-11】骑士的金币
- java实现猜测游戏,最后统计用户猜的次数
- android 自定义view 加载图片,Android自定义View基础开发之图片加载进度条
- 支持nfc的android手机型号,NFC手机有哪些 2017支持NFC功能的手机推荐
- 微软翻译离线简体中文服务器,微软翻译新增离线翻译功能,但使用体验并没有想象中的好...
- 使用NLTK做电影评论分析