zoukankan      html  css  js  c++  java
  • java操作word (jacob)

    什么是jacob?

    jacob是一个开源项目它允许在java中调用com接口自动组件,它使用JNI(本地调用程序)来进行本地调用COM库。它可运行在x86和支持32位和64位Java虚拟机 X64的环境(摘除自百度词条)。

    准备工作:

    需要的jar包:jacob.jar;此外还需要将jacob.dll放在在windows/system32目录下,否则会报错Could not initialize class com.jacob.activeX.ActiveXComponent。

    实例

    需要导入的包

    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;

    一、word转pdf

    public static void wordToPdf(String source,String toFile) 
        {
         //该方法只可以操作2003版的word(据说jacob只能这样,没亲自试过)
         //txt格式的文件也可以用该方法转换成pdf(亲测可以成功,ps:偶然发现的)
    String filename
    = source; String toFilename = toFile; // System.out.println("启动Word"); long start = System.currentTimeMillis(); ActiveXComponent app = null; try { //启动word应用程序(Microsoft Office Word 2003) app = new ActiveXComponent("Word.Application"); //// 设置word应用程序不可见 app.setProperty("Visible", false); // documents表示word程序的所有文档窗口,(word是多文档应用程序) Dispatch docs = app.getProperty("Documents").toDispatch(); //System.out.println("打开文档" + filename); //打开要转换的word文件 ,作为pdf格式保存到临时文件 Dispatch doc = Dispatch.call(docs,// "Open", // filename,// FileName false,// ConfirmConversions true // ReadOnly ).toDispatch(); //System.out.println("转换文档到PDF: " + toFilename); File tofile = new File(toFilename); if (tofile.exists()) { tofile.delete(); } Dispatch.call(doc,// "SaveAs", // toFilename, // FileName wdFormatPDF); // 关闭word文件 Dispatch.call(doc, "Close", false); long end = System.currentTimeMillis(); System.out.println("转换完成..用时:" + (end - start) + "ms."); } catch (Exception e) { System.out.println("========Error:文档转换失败:" + e.getMessage()); } finally { if (app != null) //关闭word应用程序 app.invoke("Quit", wdDoNotSaveChanges); } }

    二、word转txt

    public static void word2Txt(String inputFIle, String outputFile)
           {
               boolean flag = false;// 打开Word应用程序
               ActiveXComponent app = new ActiveXComponent("Word.Application");
              try {
                 // 设置word不可见
                 app.setProperty("Visible", new Variant(false));
                 // 打开word文件
                 Dispatch doc1 = app.getProperty("Documents").toDispatch();
    
                 Dispatch doc2 = Dispatch.invoke( doc1, "Open", Dispatch.Method,
                         new Object[] { inputFIle, new Variant(false), new Variant(true) }, new int[1]).toDispatch();
             // 作为txt格式保存到临时文件
             Dispatch.invoke(doc2, "SaveAs", Dispatch.Method, new Object[] {
                   outputFile, new Variant(7) }, new int[1]);
             // 关闭word
             Variant f = new Variant(false);
             Dispatch.call(doc2, "Close", f);
             flag = true;
          } catch (Exception e) {
    
             e.printStackTrace();
    
          } finally {
    
             app.invoke("Quit", new Variant[] {});
    
          }
       }   

    三、读取word内容(先将word转换成txt,再读取txt文件)

    public static String readWord(String path) 
        {
            String pathTo = path.replace("doc","txt");
            word2Txt(path,pathTo);
            StringBuffer stringBuffer = new StringBuffer();
            File file = new File(pathTo);
            try {
                 FileInputStream fis = new FileInputStream(file);
                byte[] buffer = new byte[1000];
                int len;
                try {
                    while(-1 != (len=fis.read(buffer)))
                    {
                        String temp = new String(buffer,0,len,"gb2312");
                        stringBuffer.append(temp);
                    }
     //               System.out.println(stringBuffer.toString());
                    
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(file.isFile())
                file.delete();
            return stringBuffer.toString();
        }
  • 相关阅读:
    基本数据类型包装类
    LeetCode算法题-Robot Return to Origin(Java实现)
    LeetCode算法题-Two Sum IV
    LeetCode算法题-Set Mismatch(Java实现)
    LeetCode算法题-Maximum Average Subarray I(Java实现)
    LeetCode算法题-Average of Levels in Binary Tree(Java实现)
    LeetCode算法题-Sum of Square Numbers(Java实现)
    LeetCode算法题-Maximum Product of Three Numbers(Java实现)
    LeetCode算法题-Merge Two Binary Trees(Java实现)
    LeetCode算法题-Construct String from Binary Tree(Java实现)
  • 原文地址:https://www.cnblogs.com/vitosun/p/4005332.html
Copyright © 2011-2022 走看看