• 
    

      <address id="upfr9"><pre id="upfr9"><strike id="upfr9"></strike></pre></address>
      1. <address id="upfr9"><tr id="upfr9"></tr></address><dl id="upfr9"></dl>

        java使用jacob實現(xiàn)word轉(zhuǎn)pdf

        背景:日常開發(fā)ERP系統(tǒng),會有一些工單或者合同之類需要填寫打印。我們就會將其word模板來通過系統(tǒng)自動化填寫并轉(zhuǎn)換為PDF格式(PDF文件打印可保證文件質(zhì)量,是一種通用的格式。文件不易去修改,比較穩(wěn)定)。所以我們將通過jacob來實現(xiàn)這些功能。

        成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供溫嶺網(wǎng)站建設(shè)、溫嶺做網(wǎng)站、溫嶺網(wǎng)站設(shè)計、溫嶺網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、溫嶺企業(yè)網(wǎng)站模板建站服務(wù),十余年溫嶺做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

        準備工作:

        1.服務(wù)器需要安裝office2007,因為我們就是調(diào)用這個來實現(xiàn)轉(zhuǎn)換。
        2.需要安裝插件jacob,安裝jacob-1.14.3-x86.dll到j(luò)dk\jdk1.7.0\jre\bin(你自己電腦安裝的jdk)
        3.需要使用jacob-1.14.3.jar包
            maven代碼如下: 

        <dependency>
          <groupId>net.sf.jacob-project</groupId>
          <artifactId>jacob</artifactId>
          <version>1.14.3</version>
        </dependency>

        4.假如通過以上準備工作未成功轉(zhuǎn)換,就下載一個SaveAsPDFandXPS.exe組件(office2007里的)。我就是通過這個組件才完成轉(zhuǎn)換。

        5.上面的在系統(tǒng)為windows7中就可以了,假如你的項目需要發(fā)布到服務(wù)器(服務(wù)器系統(tǒng)一般都是windows2008)。則還需要一步。在上面的基礎(chǔ)上再安裝安裝jacob-1.14.3-x64.dll到j(luò)dk\jdk1.7.0\jre\bin(你自己電腦安裝的jdk)中。很多人在win7下都能成功轉(zhuǎn)換,但在win2008就是出問題。我就是通過磨了一天的時間,看了各種日志才發(fā)現(xiàn)問題。

        一、工具類(OperationIo.java),這里面可以不做任何修改,復(fù)制粘貼就可以了。

        package com.repair.util.pub;
         
        import java.awt.image.BufferedImage;
        import java.io.ByteArrayInputStream;
        import java.io.File;
        import java.io.FileInputStream;
        import java.io.IOException;
        import java.io.InputStream;
         
        import javax.imageio.ImageIO;
         
        import sun.misc.BASE64Decoder;
        import sun.misc.BASE64Encoder;
         
        import com.jacob.activeX.ActiveXComponent;
        import com.jacob.com.ComThread;
        import com.jacob.com.Dispatch;
        import com.jacob.com.Variant;
         
        public class OperationIO {
         
         static final int wdFormatPDF = 17;// PDF 格式  
         /**
         * WORD轉(zhuǎn)換PDF
         * @param sfileName WORD文件存在位置
         * @param toFileName PDF文件存放位置
         */  
         public static void wordToPDF(String sfileName,String toFileName){  
            System.out.println("啟動Word...");   
            long start = System.currentTimeMillis();  
            ActiveXComponent app = null; 
            Dispatch doc = null; 
            try {   
             //調(diào)用office word
              app = new ActiveXComponent("Word.Application");   
              app.setProperty("Visible", new Variant(false)); 
              Dispatch docs = app.getProperty("Documents").toDispatch();  
              doc = Dispatch.call(docs, "Open" , sfileName).toDispatch(); 
              System.out.println("打開文檔..." + sfileName); 
              System.out.println("轉(zhuǎn)換文檔到PDF..." + toFileName);   
              File tofile = new File(toFileName);   
              if (tofile.exists()) {   
                tofile.delete();   
              }   
              Dispatch.call(doc,   
                     "SaveAs",   
                     toFileName, // FileName   
                     wdFormatPDF);   
              long end = System.currentTimeMillis();   
              System.out.println("轉(zhuǎn)換完成..用時:" + (end - start) + "ms."); 
               
                
            } catch (Exception e) {   
              System.out.println("========Error:文檔轉(zhuǎn)換失?。? + e.getMessage());   
            } finally { 
              Dispatch.call(doc,"Close",false); 
              System.out.println("關(guān)閉文檔"); 
              if (app != null)   
                app.invoke("Quit", new Variant[] {});   
              } 
             //如果沒有這句話,winword.exe進程將不會關(guān)閉 
              ComThread.Release();   
          } 
         
         /**
           * 遞歸刪除目錄下的所有文件及子目錄下所有文件
           * @param dir 將要刪除的文件目錄
           * @return boolean Returns "true" if all deletions were successful.
           *         If a deletion fails, the method stops attempting to
           *         delete and returns "false".
           */
          public static boolean deleteDir(File dir) {
            if (dir.isDirectory()) {
              String[] children = dir.list();
              for (int i=0; i<children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                  return false;
                }
              }
            }
            // 目錄此時為空,可以刪除
            return dir.delete();
          }
         /**
           * 將圖片文件轉(zhuǎn)化為字節(jié)數(shù)組字符串,并對其進行Base64編碼處理
           * @param imgFilePath 圖片地址路徑
           */
          public static String GetImageStr(String imgFilePath) {// 
            byte[] data = null;
             
            // 讀取圖片字節(jié)數(shù)組
            try {
             InputStream in = new FileInputStream(imgFilePath);
             data = new byte[in.available()];
             in.read(data);
             in.close();
            } catch (IOException e) {
             e.printStackTrace();
            }
             
            // 對字節(jié)數(shù)組Base64編碼
            BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(data);// 返回Base64編碼過的字節(jié)數(shù)組字符串
           }
          
          
          /** 
           * 將二進制轉(zhuǎn)換為圖片 
           * 
           * @param base64String 
           */ 
          public static void base64StringToImage(String base64String,String imageoutpath) { 
            try { 
             BASE64Decoder decoder = new sun.misc.BASE64Decoder(); 
              byte[] bytes1 = decoder.decodeBuffer(base64String); 
              ByteArrayInputStream bais = new ByteArrayInputStream(bytes1); 
              BufferedImage bi1 = ImageIO.read(bais); 
              File w2 = new File(imageoutpath);// 可以是jpg,png,gif格式 
              ImageIO.write(bi1, "jpg", w2);// 不管輸出什么格式圖片,此處不需改動 
            } catch (IOException e) { 
              e.printStackTrace(); 
            } 
          } 
        }
        
        

        二、業(yè)務(wù)類(PrintWordToPdf.java),這里

        package com.hjm.Test;
         
        import java.io.BufferedWriter;
        import java.io.File;
        import java.io.FileNotFoundException;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.OutputStreamWriter;
        import java.io.UnsupportedEncodingException;
        import java.io.Writer;
        import java.util.HashMap;
        import java.util.Map;
         
        import com.engineering.pojos.pub.gcRecordArchive;
        import com.repair.util.pub.OperationIO;
         
        import freemarker.template.Configuration;
        import freemarker.template.Template;
        import freemarker.template.TemplateException;
         
        public class PrintWordToPdf {
         
         public static void main(String[] args) {
         //創(chuàng)建一個Configuration的實例
         Configuration configuration = new Configuration();
         //設(shè)置編碼
         configuration.setDefaultEncoding("utf-8");
         //創(chuàng)建Map對象,來保存要填寫的數(shù)據(jù)
         Map<String, Object> paraMap = new HashMap<String, Object>();
         //下面這些是我測試的一些數(shù)據(jù)
         paraMap.put("ReceivingParty", "中國民航");
         
         paraMap.put("PackingListNo", 10087);
         
         paraMap.put("ConNo", 10088);
         
         try {
          //調(diào)用模板的文件夾,new File("D:\\測試")是一個絕對路徑,你可以自己設(shè)置為服務(wù)器路徑。
          configuration.setDirectoryForTemplateLoading(new File("D:\\測試"));
         } catch (IOException e) {
          e.printStackTrace();
         }
         Template t = null;
         try {
          //獲取模板文件
          t = configuration.getTemplate("FMO-08 Packing List.ftl"); // 獲取模板文件
         } catch (IOException e) {
          e.printStackTrace();
         }
         //生成一個文件保存的文件夾
         File file =new File("D:\\最終"); 
         //判斷文件夾是否存在,存在刪除并重創(chuàng)
         if (!file .exists() && !file .isDirectory())   
         {    
           file.mkdir();  
         } else  
         { 
          boolean b = OperationIO.deleteDir(file);
          if(b){
          file.mkdir();
          }
         } 
         //填寫數(shù)據(jù)后生成的word文件。
         String outfilepath = "D:/最終\\結(jié)果"+".doc";
         File outFile = new File(outfilepath); // 導(dǎo)出文件
         Writer out = null;
         try {
          try {
          out = new BufferedWriter(new OutputStreamWriter(
           new FileOutputStream(outFile),"utf-8"));
          } catch (UnsupportedEncodingException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          }
         } catch (FileNotFoundException e1) {
          e1.printStackTrace();
         }
         try {
          t.process(paraMap,out); // 將填充數(shù)據(jù)填入模板文件并輸出到目標文件
          out.flush();
          out.close();
          //轉(zhuǎn)換PDF的文件
          OperationIO.wordToPDF(outfilepath,"D:/最終\\結(jié)果"+".pdf");
         } catch (TemplateException e) {
          e.printStackTrace();
         } catch (IOException e) {
          e.printStackTrace();
         }
         }
        }

        總結(jié):通過以上代碼,就可以在模板中填寫好數(shù)據(jù),并將其生成word文件與其pdf文件。

        以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

        當前文章:java使用jacob實現(xiàn)word轉(zhuǎn)pdf
        URL分享:http://www.jbt999.com/article16/pspggg.html

        成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊電子商務(wù)、用戶體驗靜態(tài)網(wǎng)站、商城網(wǎng)站、標簽優(yōu)化

        廣告

        聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

        外貿(mào)網(wǎng)站制作

      2. 
        

          <address id="upfr9"><pre id="upfr9"><strike id="upfr9"></strike></pre></address>
          1. <address id="upfr9"><tr id="upfr9"></tr></address><dl id="upfr9"></dl>
            亚洲综合大片69999 | 伊人网啪啪| 免费无码一区二区三区四区 | 免费一级黄色录像 | 少妇大战黑人无套A片 | 天天躁日日躁狠狠躁av麻豆 | 久久综合加勒比 | 黄色AV网探花 | 69操逼网 | 激情乱伦亚洲 |