做兽医项目需要用到这种需求,很多程序员都遇到过,有些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以及出现的问题解决相关推荐

  1. 怎么将word文档转为pdf

    很多人问我怎么将word文档转为pdf,用程序,这个就是 package com.zms.office2pdf; import jp.ne.so_net.ga2.no_ji.jcom.IDispatc ...

  2. word文档转为PDF以及多种文档格式转换

    word文档转为PDF以及多种文档格式转换 项目地址:https://gitee.com/Jakewabc/word-of-pdf.git 相关案例: https://github.com/aspos ...

  3. Jacob Java程序把Word文档直接转换成Html文件

    2019独角兽企业重金招聘Python工程师标准>>> Jacob是Java和Windows下的Com桥,通过它我们可以在Java程序中调用COM组件.如果你的JDK是1.4,那你需 ...

  4. doc转pdf java不失真_java使用Aspose实现 word文档转pdf文件高效不失真

    java使用Aspose word文档转pdf功能实现 主要步骤 使用Aspose进行文档转换,首先引入相应的jar包到系统环境 项目resource下导入license.xml文件 使用Aspose ...

  5. Word文档或PDF转图片

    首先把Word文档转为pdf,方法网上很多,比如用jacob.poi.pdfbox.xpdf.OpenOffice+JodConverter(Openoffice)等. 现在主要讲pdf转图片方法: ...

  6. Word处理控件Aspose.Words功能演示:使用 Android 库将 Word 文档转换为 PDF

    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word.此 ...

  7. Java 将 Word 文档转换为 PDF 的完美工具

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:为什么魂斗罗只有 128 KB却可以实现那么长的剧情?个人原创+1博客:点击前往,查看更多 来源:https:/ ...

  8. azw3转换为pdf_干货:如何Java 将 Word 文档转换为 PDF

    在日常工作中,PDF格式良好的视觉阅读性和稳定性使其使用越来越广泛.因此我们常会遇到需要将成型的Word文档转换为PDF格式的情况.本文就将通过使用Java程序来演示如何将Word文档转换成PDF格式 ...

  9. Java将Word文档转换为PDF的完美工具

    引用至:https://mp.weixin.qq.com/s/JIgo3f98HufGJx23mgtvag Java 将 Word 文档转换为 PDF 的完美工具 在日常工作中,PDF格式良好的视觉阅 ...

最新文章

  1. 51nod 最长公共子序列测试 【LCS+回溯】
  2. [CF1076E]Vasya and a Tree
  3. 使用jsoup解析html
  4. 一文带你了解腾讯位置服务的开发与接入
  5. 《梦断代码》阅读笔记之第8章至最后
  6. java入门编程(菜鸟教程)
  7. 华硕固件默认ip_斐讯刷华硕固件后开启QOS限速的方法
  8. 计数器matlab,MATLAB中的几个时间计数器
  9. 计算机协会取消信息学奥赛,15万人参加的信息学奥赛停了 学生咋办家长咋看?...
  10. 一位企业家的成功之道
  11. 几款常见的可视化HTML编辑器(WYSIWYG)
  12. 题解 CF32C 【Flea】
  13. 卜算子.咏梅 英文版
  14. 东航电商前端技术周刊第一期20180601
  15. 【PTA 7-11】骑士的金币
  16. java实现猜测游戏,最后统计用户猜的次数
  17. android 自定义view 加载图片,Android自定义View基础开发之图片加载进度条
  18. 支持nfc的android手机型号,NFC手机有哪些 2017支持NFC功能的手机推荐
  19. 微软翻译离线简体中文服务器,微软翻译新增离线翻译功能,但使用体验并没有想象中的好...
  20. 使用NLTK做电影评论分析

热门文章

  1. TCP四次挥手断开连接
  2. 网络协议分为哪几层---物理层,连接层,网络层,传输层,应用层详解
  3. 推荐 8 个优质的公众号
  4. python中的scipy库_scipy库中的odeint函数
  5. 海思3559A pwm驱动编写记录
  6. 服务异步通信RabbitMQ
  7. MFC-CListCtrl重绘,添加按钮到单元格
  8. STM32的USART串口通信
  9. (4)AES分组加密算法(原理详解)
  10. 超分文章记录 SRCNN-FSRCNN-ESPCN-VDCN-DRCN-RDN-LapSRN-SRDenseNet-SRGAN