黑马程序员技术交流社区

标题: 【石家庄校区】java实现word转pdf [打印本页]

作者: 张荫    时间: 2018-1-4 11:12
标题: 【石家庄校区】java实现word转pdf
本帖最后由 张荫 于 2018-2-1 14:45 编辑

大家在工作之后可能会遇到上传一个word文件然后要显示在html的页面当中的问题。那么有什么好得解决方案呢?
我这里有2种解决方案:
1.将word文件转换成html在页面中显示出来
2.将word转换成pdf使用插件展示pdf文件。

使用第一种方式有如下弊端,word中有图片,转换成为html之后,整个文档的格式由于有图片,或者表格可能发生会变化。
使用word转pdf由于转换成pdf之后不管有没有图片或者表格对我们的格式都没有影响。
所以我们使用第二种方式来实现。

查阅了相关资料我决定选用jacob来实现将word转化成为pdf。jacob.jar的下载地址 如果这个地址不能使用请使用这个 jacob-1.18.zip (472.78 KB, 下载次数: 173)

简介:
jacob(java com bridge,java com桥)分为两个部分,jacob.jar,jacob.dll,使用时两个东西的版本要一致,而且还分32位和64位,它的位数和jdk的位数有关,与操作系统的位数无关。它的原理是通过java的jni功能,调用系统组件dll,通过这个com桥来操作com组件(windows的一种软件编程技术吧),最终完成对office文档的操作。
使用前操作:
   1、把dll文件放在%JAVA_HOME%\bin下(注意系统是32位还是64位),也可以放在C:\Windows\System32下,如果是64位应该放在C:\Windows\SysWOW64 下。建议放在jdk的bin目录下
    2、如果是在eclipse下开发,需要重新引入jdk(Preference/Java/Installed JREs)
    3、开发时将jacab.jar包放在项目lib下并add到liabraries中即可。


使用jacob有如下几个要求。
1.服务器要使用windows操作系统
2.服务器需要安装office 最好是使用2000及以上版本
3.不同的操作系统会存在不同方法的环境配置问题。
下面说下我遇到的情况:
解压后获得3个文件:
jacob.jar
jacob-1.18-x64.dll
jacob-1.18-x86.dll

jacob.jar 放到项目的lib目录

win10:将jacob-1.18-x86.dll 放到C:\Windows\SysWOW64

win7或win8:
jacob-1.18-x64.dll 放到C:\Windows\System32
jacob-1.18-x86.dll 放到C:\Windows\SysWOW64
注:
win7/win8就是这么设计的, System32放64位dll,SysWOW64放32位。
还要注意的是,32位JDK只能加载32位DLL,64位JDK只能加载64位DLL,不能互相兼容。




到这里我们就把jacob集成到我们的程序里了。
下面就是去转化了:
[Java] 纯文本查看 复制代码
 /**
   *
   * <p>Title: word2pdf</p>
   * <p>Description: 将word转换成pdf</p>
   * @param docfile word文件路径
   * @param pdffile pdf文件路径
   */
  public static void word2pdf(String docfile, String pdffile)      
  {      
      // 启动word应用程序(Microsoft Office Word 2003)   
      ActiveXComponent app = null;   
      try{  
          ComThread.InitSTA();  
          app = new ActiveXComponent("Word.Application");      
          app.setProperty("Visible", false);  
          System.out.println("*****正在转换...*****");   
          Dispatch docs = app.getProperty("Documents").toDispatch();      
          Dispatch doc = Dispatch.call(  
                  docs,      
                  "Open",  
                  docfile,  
                  false,  
                  true).toDispatch();      
          Dispatch.call(doc, "ExportAsFixedFormat", pdffile, WD2PDF);   
          // 关闭word文件   
          Dispatch.call(doc, "Close", false);   
      }      
      catch (Exception e)      
      {   ComThread.Release();   
          e.printStackTrace();      
      }      
      finally      
      {      
          //关闭word应用程序   
          app.invoke("Quit", 0);     
          ComThread.Release();  
      }     
      System.out.println("*****转换完毕********");   
  }  

以上就是如何将word转换为pdf
谢谢观看。

作者: Yin灬Yan    时间: 2018-1-4 17:00
我来占层楼啊   
作者: 尹哈哈哈    时间: 2018-1-5 15:33
pdf转word呢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2