自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

服務(wù)端Word文件模板書(shū)簽替換、轉(zhuǎn)換文件類型的另類實(shí)現(xiàn)

開(kāi)發(fā) 前端
市面上處理文字的的辦公軟件有很多,包括WPS、MSOffice、永中OFFICE,當(dāng)然還有開(kāi)源的openoffice、liboffice等。我們?cè)陧?xiàng)目開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)遇到預(yù)覽word文件,數(shù)據(jù)庫(kù)中數(shù)據(jù)自動(dòng)填充word模板等需求。

市面上處理文字的的辦公軟件有很多,包括WPS、MSOffice、永中OFFICE,當(dāng)然還有開(kāi)源的openoffice、liboffice等。我們?cè)陧?xiàng)目開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)遇到預(yù)覽word文件,數(shù)據(jù)庫(kù)中數(shù)據(jù)自動(dòng)填充word模板等需求?,F(xiàn)在能夠滿足以上需求的技術(shù)有很多,服務(wù)端可通過(guò)POI\aspose等處理,也可通過(guò)客戶端調(diào)用OFFICE組件處理,本人曾經(jīng)在這方便做了很多測(cè)試,最終發(fā)現(xiàn)兼容性最好的、接口對(duì)JAVA程序員最友好的就屬永中OFFICE,因?yàn)樗揪褪荍AVA實(shí)現(xiàn)的,使用起來(lái)非常方便。

我的測(cè)試環(huán)境使用的是永中2016版本,它運(yùn)行要求JRE1.6,且我發(fā)現(xiàn)它應(yīng)該是對(duì)JRE進(jìn)行過(guò)重構(gòu),按永中SDK要求編寫(xiě)代碼通過(guò)自O(shè)RACAL官網(wǎng)下載的jdk1.6編譯后運(yùn)行是失敗的,現(xiàn)在都2021年了,我們的項(xiàng)目絕大多數(shù)都JDK1.8以上版本了,那么怎么讓SDK兼容我們的項(xiàng)目呢?怎么實(shí)現(xiàn)標(biāo)題中提到的兩個(gè)需求呢?下面我說(shuō)說(shuō)我的處理方法吧:

1、下載永中軟件并安裝(官網(wǎng)下載即可)

2、安裝后打開(kāi)安裝路徑可以看到如下圖 

永中軟件安裝目錄 

JRE:即永中軟件的運(yùn)行環(huán)境

Yozo_Office.jar: 即永中為開(kāi)發(fā)者提供的SDK,可以將jar導(dǎo)入到工程中

3、編寫(xiě)WORD文件處理服務(wù)組件

處理word文件的代碼片段,詳細(xì)代碼請(qǐng)?jiān)谖暮笙螺d源碼查閱 

  1. 處理word文件的代碼片段,詳細(xì)代碼請(qǐng)?jiān)谖暮笙螺d源碼查閱     
  2.  
  3. /** 
  4.      * 將word文件轉(zhuǎn)換為對(duì)應(yīng)格式的文件的字節(jié)數(shù)組 
  5.      * @param type 將word文件轉(zhuǎn)換成的文件格式 pdf、html\ofd\txt\xml 
  6.      * @return 
  7.      * @throws IOException 
  8.      */ 
  9.     public byte[]  convertFile(String type) throws IOException { 
  10.         int typePdf = FileConstants.TYPE_PDF; 
  11.         if("html".equals(type.toLowerCase())) {//此功能轉(zhuǎn)換后亂碼,后期可采用 this.workbook.saveAs("D:/2.html"); 方式存儲(chǔ)html后,將字節(jié)返回 
  12.             typePdf= FileConstants.FILETYPE_HTML; 
  13.         }else if("ofd".equals(type.toLowerCase())) { 
  14.             typePdf= FileConstants.TYPE_OFD;    // 這個(gè)是不成功的,應(yīng)該是版本太低 
  15.         }else if("txt".equals(type.toLowerCase())) { 
  16.             typePdf = FileConstants.TYPE_TXT; 
  17.         }else if("xml".equals(type.toLowerCase())) { 
  18.             typePdf = FileConstants.FILETYPE_XML; 
  19.         }else if("doc".equals(type.toLowerCase())||"xls".equals(type.toLowerCase())||"ppt".equals(type.toLowerCase())) { 
  20.             typePdf = FileConstants.TYPE_MS; 
  21.         }else if("docx".equals(type.toLowerCase())||"xlsx".equals(type.toLowerCase())||"pptx".equals(type.toLowerCase())) { 
  22.             typePdf = FileConstants.TYPE_MS_EX; 
  23.         } 
  24.          
  25.         return this.workbooks.getWorkbookAsByteArray(workbook, typePdf); 
  26.     } 
  27.  
  28. /** 
  29.      * 替換word模板中的書(shū)簽 
  30.      * @param jsonObject    數(shù)據(jù)內(nèi)容 {“bookmarkname”:”test“} 
  31.      */ 
  32.     public void replaceBookMark(JSONObject jsonObject) { 
  33.         BookMarks bookMarks = this.document.getBookMarks(); 
  34.         BookMark[] allBookmarks = bookMarks.getAllBookmarks(); 
  35.         for(BookMark bookMark:allBookmarks){ 
  36.             String name = bookMark.getName(); 
  37.             TextRange range = bookMark.getRange(); 
  38.             //if(name!=null)name=name.replace("PO_",""); 
  39.             String value = ""
  40.             Object o = jsonObject.get(name); 
  41.             if(o!=null){ 
  42.                 value=jsonObject.get(name).toString(); 
  43.             } 
  44.             try {  
  45.                     range.insertText(value);                
  46.             }catch (Exception e){ 
  47.                 range.insertText(value); 
  48.             } 
  49.         } 
  50.     } 
  51.  
  52. /** 
  53.      * 導(dǎo)出數(shù)據(jù)成excel文件 
  54.      * @param jsonObject    數(shù)據(jù)內(nèi)容 {“bookmarkname”:”test“} 
  55.      */ 
  56. public byte[] exportData2File(JSONArray taskArray,int allrow) { 
  57.  

4、(重點(diǎn))解決word文件處理組件與我們的項(xiàng)目文件交互問(wèn)題

本人通過(guò)SOCKET即時(shí)通訊服務(wù)解決數(shù)據(jù)交互問(wèn)題 

  1. /** 
  2.  * 文件傳輸Server端<br> 
  3.  * 功能說(shuō)明: 
  4.   * @Author 空中智囊 
  5.  * @Date 2016年09月01日 
  6.  * @version 1.0 
  7.  */ 
  8. public class SocketService extends ServerSocket { 
  9.     private static final int SERVER_PORT = 8899; // 服務(wù)端端口 
  10.  
  11.     private WordUtil wordUtil=null
  12.     public SocketService() throws Exception { 
  13.         super(SERVER_PORT); 
  14.         this.wordUtil=new WordUtil(); 
  15.     } 
  16.  
  17.     /** 
  18.      * 使用線程處理每個(gè)客戶端傳輸?shù)奈募?nbsp;
  19.      * @throws Exception 
  20.      */ 
  21.     public void load() throws Exception { 
  22.         System.out.println("服務(wù)端啟動(dòng),監(jiān)聽(tīng)端口為:"+SERVER_PORT); 
  23.         while (true) { 
  24.             // server嘗試接收其他Socket的連接請(qǐng)求,server的accept方法是阻塞式的 
  25.             Socket socket = this.accept(); 
  26.             socket.setSoTimeout(1200000); 
  27.             /** 
  28.              * 我們的服務(wù)端處理客戶端的連接請(qǐng)求是同步進(jìn)行的, 每次接收到來(lái)自客戶端的連接請(qǐng)求后, 
  29.              * 都要先跟當(dāng)前的客戶端通信完之后才能再處理下一個(gè)連接請(qǐng)求。 這在并發(fā)比較多的情況下會(huì)嚴(yán)重影響程序的性能, 
  30.              * 為此,我們可以把它改為如下這種異步處理與客戶端通信的方式 
  31.              */ 
  32.             // 每接收到一個(gè)Socket就建立一個(gè)新的線程來(lái)處理它 
  33.             new Thread(new Task(socket,wordUtil)).start(); 
  34.  
  35.         } 
  36.     } 
  37.     /** 
  38.      * 入口 
  39.      * @param args 
  40.      */ 
  41.     public static void main(String[] args) { 
  42.         try { 
  43.             SocketService server = new SocketService(); // 啟動(dòng)服務(wù)端 
  44.             server.load(); 
  45.         } catch (Exception e) { 
  46.             e.printStackTrace(); 
  47.         } 
  48.     } 
  49. /** 
  50.  * 處理客戶端傳輸過(guò)來(lái)的文件線程類 
  51.  */ 
  52. public class Task implements Runnable { 
  53.   @Override 
  54.     public void run() { 
  55.         System.out.println("===客戶端連接成功====="); 
  56.  
  57.         System.out.println("****************************************************************"); 
  58.         SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
  59.         /** 
  60.          * 轉(zhuǎn)換要求的格式 
  61.          */ 
  62.         try { 
  63.  
  64.             /********************************讀取文件信息********************************/ 
  65.             dis = new DataInputStream(socket.getInputStream()); 
  66.             // 文件名和長(zhǎng)度 
  67.             String fileName = dis.readUTF();//1、文件名字 
  68.             long fileLength = dis.readLong();//2、長(zhǎng)度 
  69.             String toext = dis.readUTF();//3、擴(kuò)展名 
  70.             String taskType=dis.readUTF();//4、文件操作類型 
  71.             System.out.println("針對(duì)文件的操作類型====="+taskType); 
  72.             String valueObject=dis.readUTF();//5、替換書(shū)簽的值 
  73.             System.out.println(format.format(new Date())+":開(kāi)始接收文件"); 
  74.             ByteArrayOutputStream bos = new ByteArrayOutputStream((int)fileLength); 
  75.             byte[] bytes = new byte[1024]; 
  76.             int length = 0; 
  77.             while((length = dis.read(bytes, 0, bytes.length)) != -1) { 
  78.                 bos.write(bytes, 0, length); 
  79.             } 
  80.             byte[] filebytes = bos.toByteArray(); 
  81.             System.out.println("原始文件大小====="+fileLength+",實(shí)際接收文件大小="+filebytes.length); 
  82.  
  83.             /********************************讀取文件信息結(jié)束********************************/ 
  84.  
  85.             dos = new DataOutputStream(socket.getOutputStream()); 
  86.  
  87.             /********************************校驗(yàn)文件信息********************************/ 
  88.             boolean process=true
  89.             if(fileLength>0){ 
  90.             }else
  91.                 dos.writeUTF("error"); 
  92.                 dos.flush(); 
  93.  
  94.                 dos.writeUTF("文件沒(méi)有任何內(nèi)容,請(qǐng)重新傳送"); 
  95.                 dos.flush(); 
  96.                 process=false
  97.             } 
  98.             if(filebytes.length!=fileLength){ 
  99.                 dos.writeUTF("error"); 
  100.                 dos.flush(); 
  101.  
  102.                 dos.writeUTF("接受文件與實(shí)際文件大小不符合,請(qǐng)重新傳送文件"); 
  103.                 dos.flush(); 
  104.                 process=false
  105.             } 
  106.             /********************************校驗(yàn)文件信息結(jié)束********************************/ 
  107.  
  108.             /********************************處理文件********************************/ 
  109.             if(process){ 
  110.                 byte[] fileBytes=null
  111.                  
  112.                 this.wordUtil.openFile(filebytes,fileName);//打開(kāi)院文件 
  113.                 //workbook =workbooks.createWorkbookFromByteArray(filebytes,fileName); 
  114.                 String lowerExt = toext.toLowerCase(); 
  115.                 if("convertFile".equals(taskType)){ 
  116.                     System.out.println("開(kāi)始將文件["+fileName+"]轉(zhuǎn)換成===="+lowerExt); 
  117.                     fileBytes=this.wordUtil.convertFile(lowerExt); 
  118.                     System.out.println(format.format(new Date())+":轉(zhuǎn)換"+toext+"完成"); 
  119.                 }else if("replaceBookMark".equals(taskType)){ 
  120.                     System.out.println("開(kāi)始將文件["+fileName+"]書(shū)簽進(jìn)行替換===="); 
  121.                     JSONObject jsonObject = JSONObject.fromObject(valueObject); 
  122.                     this.wordUtil.replaceBookMark(jsonObject); 
  123.                     fileBytes = this.wordUtil.convertFile(lowerExt); 
  124.                     System.out.println("===============替換書(shū)簽完成============"); 
  125.                 }else if("exportTask".equals(taskType)) {//處理業(yè)務(wù)數(shù)據(jù) 導(dǎo)出任務(wù)數(shù)據(jù) 
  126.                     System.out.println("開(kāi)始導(dǎo)出業(yè)務(wù)數(shù)據(jù)===="+valueObject); 
  127.                     ServiceUtil serviceUtil = new ServiceUtil(this.wordUtil); 
  128.                     JSONObject jsonObject = JSONObject.fromObject(valueObject); 
  129.                     fileBytes = serviceUtil.exportData2File(jsonObject.getJSONArray("datalist"), jsonObject.getInt("size")); 
  130.                      System.out.println("===============導(dǎo)出業(yè)務(wù)數(shù)據(jù)完成============"); 
  131.                 } 
  132.                  
  133.                  
  134.                 /********************************處理文件結(jié)束********************************/ 
  135.                 if(fileBytes==null){ 
  136.                     dos.writeUTF("error"); 
  137.                     dos.flush(); 
  138.                     dos.writeUTF("處理文件過(guò)程中錯(cuò)誤"); 
  139.                     dos.flush(); 
  140.                     process=false
  141.                 } 
  142.  
  143.  
  144.                 /********************************返回處理過(guò)的文件********************************/ 
  145.                 if(process){ 
  146.                     dos.writeUTF("info");//文件處理完成,將信息返回到客戶端 
  147.                     dos.flush(); 
  148.                     int fileBytelength = fileBytes.length;//轉(zhuǎn)換后的文件長(zhǎng)度 
  149.                     System.out.println(format.format(new Date())+":======== 服務(wù)端開(kāi)始發(fā)送文件流,文件大?。?quot;+getFormatFileSize(fileBytelength)+") ========"); 
  150.                     dos.writeLong(fileBytelength); 
  151.                     dos.flush(); 
  152.                     dos.write(fileBytes, 0, fileBytelength);//將文件一起寫(xiě)入到輸出流發(fā)送 
  153.                     dos.flush(); 
  154.                     System.out.println(format.format(new Date())+":======== 發(fā)送文件流成功 ========"); 
  155.                 } 
  156.                 /********************************返回處理過(guò)的文件完成********************************/ 
  157.  
  158.             } 
  159.         } catch (Exception e) { 
  160.             String error = e.toString(); 
  161.             System.out.println("error==================="+error); 
  162.             StackTraceElement[] stackTrace = e.getStackTrace(); 
  163.             for(StackTraceElement s:stackTrace){ 
  164.                 int lineNumber = s.getLineNumber(); 
  165.                 String methodName = s.getMethodName(); 
  166.                 String className = s.getClassName(); 
  167.                 String filename = s.getFileName(); 
  168.                 System.out.print("err:"+filename+"  "+className+"  "+methodName+"  "+lineNumber); 
  169.                 System.out.println(""); 
  170.             } 
  171.             try { 
  172.                 dos.writeUTF("error"); 
  173.                 dos.flush(); 
  174.                 dos.writeUTF("處理文件過(guò)程中錯(cuò)誤=="+e.toString()); 
  175.                 dos.flush(); 
  176.             }catch (Exception ex){ 
  177.                 String exrror =ex.toString(); 
  178.                 System.out.println("返回?cái)?shù)據(jù)處理錯(cuò)誤信息==================="+exrror); 
  179.             } 
  180.  
  181.         }finally { 
  182.             System.out.println("關(guān)閉資源"); 
  183.             try { 
  184.                 if(wordUtil!=null)wordUtil.close(); 
  185.                 socket.close(); 
  186.             } catch (Exception e) { 
  187.                 String error = e.toString(); 
  188.                 System.out.println(error); 
  189.                 e.printStackTrace(); 
  190.             } 
  191.             System.out.println("****************************************************************"); 
  192.         } 
  193.  
  194.  
  195. /** 
  196.  * 文件傳輸Clinet端<br> 
  197.  * 功能說(shuō)明: 
  198.  * @Author 空中智囊 
  199.  * @Date 2016年09月01日 
  200.  * @version 1.0 
  201.  */ 
  202. public class SocketClient extends Socket { 
  203.     public static final Logger LOGGER = LoggerFactory.getLogger(SocketClient.class); 
  204.  
  205.     private static final String SERVER_IP = "127.0.0.1"; // word文件組件處理服務(wù)IP地址 
  206.     private static final int SERVER_PORT = 8899;    // word文件組件處理服務(wù)端口 
  207.     private int soTimeout = 60000;  // 服務(wù)鏈接超時(shí)時(shí)間 60s 
  208.     private Socket client = this; 
  209.     private FileInputStream fis; 
  210.     private DataOutputStream dos; 
  211.     private DataInputStream dis; 
  212.     private FileOutputStream fos; 
  213.  
  214.     public SocketClient(String listenip, int listenport) throws Exception { 
  215.         super(listenip, listenport); 
  216.         this.setSoTimeout(this.soTimeout); 
  217.         LOGGER.info("Cliect[port:" + this.client.getLocalPort() + "] 成功連接服務(wù)端"); 
  218.     } 
  219.  
  220.     public SocketClient() throws Exception { 
  221.         super(SERVER_IP, SERVER_PORT); 
  222.         this.setSoTimeout(this.soTimeout); 
  223.         LOGGER.info("Cliect[port:" + this.client.getLocalPort() + "] 成功連接服務(wù)端"); 
  224.     } 
  225.  
  226.     public SocketClient(String listenip, int listenport, int soTimeout) throws Exception { 
  227.         super(listenip, listenport); 
  228.         this.setSoTimeout(soTimeout); 
  229.         LOGGER.info("Cliect[port:" + this.client.getLocalPort() + "] 成功連接服務(wù)端"); 
  230.     } 
  231.  
  232.     /** 
  233.      * 處理word文件 
  234.      * @param srcRealPath   模板word文件路徑絕對(duì)地址 
  235.      * @param descRealPath  處理后的文件存放地址絕對(duì)路徑 
  236.      * @param taskType      處理文件的類型 convertFile/replaceBookMark/exportTask  
  237.      * @param jsonObject    傳給服務(wù)端的數(shù)據(jù)對(duì)象,這個(gè)參數(shù)可根據(jù)服務(wù)端需求進(jìn)行調(diào)整 
  238.      * @return  處理結(jié)果 
  239.      */ 
  240. public JSONObject processOffice(String srcRealPath, String descRealPath, String taskType, JSONObject jsonObject) { 
  241.         JSONObject rtnObject = new JSONObject(); 
  242.         String code = "200"
  243.         String message = ""
  244.  
  245.         try { 
  246.             File file = new File(srcRealPath); 
  247.             if (!file.exists() || !file.canWrite()) { 
  248.                 code = "200"
  249.                 message = "文件不存在,或已被占用"
  250.                 rtnObject.element("code", code); 
  251.                 rtnObject.element("message", message); 
  252.                 JSONObject var41 = rtnObject; 
  253.                 return var41; 
  254.             } 
  255.  
  256.             LOGGER.info(srcRealPath + "===>" + descRealPath); 
  257.             if (file.exists() && file.canWrite()) { 
  258.                 String filename = file.getName(); 
  259.                 this.fis = new FileInputStream(file); 
  260.                 this.dos = new DataOutputStream(this.client.getOutputStream()); 
  261.                 this.dos.writeUTF(filename);//文件名字 
  262.                 this.dos.flush(); 
  263.                 this.dos.writeLong(file.length());//文件長(zhǎng)度 
  264.                 this.dos.flush(); 
  265.                 String ext = descRealPath.substring(descRealPath.lastIndexOf(".") + 1, descRealPath.length()); 
  266.                 this.dos.writeUTF(ext);//源文件后綴名字 
  267.                 this.dos.flush(); 
  268.                 this.dos.writeUTF(taskType);//任務(wù)類型 
  269.                 this.dos.flush(); 
  270.                 if (YOZOOfficeUtil.PROCESS_TYPE_CONVERTFILE.equals(taskType)) { 
  271.                     this.dos.writeUTF(jsonObject.toString()); 
  272.                     this.dos.flush(); 
  273.                 } 
  274.  
  275.                 LOGGER.info("======== 開(kāi)始向服務(wù)端傳送源文件" + srcRealPath + " ========"); 
  276.                 byte[] bytes = new byte[1024]; 
  277.                 long progress = 0L; 
  278.  
  279.                 int length; 
  280.                 while((length = this.fis.read(bytes, 0, bytes.length)) != -1) { 
  281.                     this.dos.write(bytes, 0, length); 
  282.                     this.dos.flush(); 
  283.                     progress += (long)length; 
  284.                     LOGGER.info("| " + 100L * progress / file.length() + "% |"); 
  285.                 } 
  286.  
  287.                 LOGGER.info("======== 文件傳輸成功 (" + file.length() / 1048576L + ")M========"); 
  288.                 this.client.shutdownOutput(); 
  289.                 LOGGER.info("======== 開(kāi)始轉(zhuǎn)換" + ext + " ========"); 
  290.                 InputStream inputStream = this.client.getInputStream(); 
  291.                 this.dis = new DataInputStream(inputStream); 
  292.                 String result = this.dis.readUTF(); 
  293.                 if ("error".equals(result)) { 
  294.                     String reason = this.dis.readUTF(); 
  295.                     LOGGER.info(reason); 
  296.                     code = "500"
  297.                     message = reason; 
  298.                 } else if ("info".equals(result)) { 
  299.                     long l = this.dis.readLong(); 
  300.                     LOGGER.info("======== 轉(zhuǎn)換" + ext + "完成,文件大?。?quot; + l / 1048576L + ")M ========"); 
  301.                     LOGGER.info("======== 開(kāi)始接受" + ext + " ========"); 
  302.                     File newFile = new File(descRealPath); 
  303.                     if (newFile.exists()) { 
  304.                         newFile.delete(); 
  305.                     } 
  306.  
  307.                     this.fos = new FileOutputStream(newFile); 
  308.                     progress = 0L; 
  309.                     bytes = new byte[1048576]; 
  310.  
  311.                     while((length = this.dis.read(bytes, 0, bytes.length)) != -1) { 
  312.                         this.fos.write(bytes, 0, length); 
  313.                         this.fos.flush(); 
  314.                     } 
  315.  
  316.                     LOGGER.info("======== 接受" + ext + "文件成功========"); 
  317.                     this.dis.close(); 
  318.                 } else { 
  319.                     code = "500"
  320.                     message = "鏈接被強(qiáng)制關(guān)閉...."
  321.                 } 
  322.             } else { 
  323.                 code = "404"
  324.                 message = "文件不存在,或已被占用:" + srcRealPath; 
  325.             } 
  326.         } catch (Exception e) { 
  327.             code = "500"
  328.             message = "客戶端報(bào)錯(cuò):" + e.toString(); 
  329.             LOGGER.error("異常:",e); 
  330.  
  331.         } finally { 
  332.             if (this.fis != null) { 
  333.                 try { 
  334.                     this.fis.close(); 
  335.                 } catch (Exception var38) { 
  336.                     ; 
  337.                 } 
  338.             } 
  339.  
  340.             if (this.fos != null) { 
  341.                 try { 
  342.                     this.fos.close(); 
  343.                 } catch (Exception var37) { 
  344.                     ; 
  345.                 } 
  346.             } 
  347.  
  348.             try { 
  349.                 this.client.close(); 
  350.             } catch (Exception var36) { 
  351.                 ; 
  352.             } 
  353.  
  354.         } 
  355.  
  356.         rtnObject.element("code", code); 
  357.         rtnObject.element("message", message); 
  358.         return rtnObject; 
  359.     } 
  360.  
  361.     public static void main(String[] args) { 
  362.         try { 
  363.             SocketClient socketClient = new SocketClient(); 
  364.             // 將文檔轉(zhuǎn)換成pdf文件 
  365.             socketClient.processOffice("D:/2.doc","D:/2.pdf",YOZOOfficeUtil.PROCESS_TYPE_CONVERTFILE,null); 
  366.  
  367.             // 將文檔轉(zhuǎn)換成pdf文件 
  368.             JSONObject dataObject = new JSONObject(); 
  369.             dataObject.element("bookmarkname","這個(gè)是測(cè)試呢日哦那個(gè)"); 
  370.             socketClient.processOffice("D:/2.doc","D:/2.pdf",YOZOOfficeUtil.PROCESS_TYPE_REPLACEBOOKMARK,dataObject); 
  371.         } catch (Exception e) { 
  372.             LOGGER.error("異常:",e); 
  373.  
  374.         } 
  375.  
  376.     } 

5、啟動(dòng)word文件處理組件服務(wù)端 

服務(wù)端WORD文件模板書(shū)簽替換、轉(zhuǎn)換文件類型的另類實(shí)現(xiàn)(源碼)
組件啟動(dòng)腳本

nohup ./ofdServer.sh &

6、調(diào)用服務(wù)端對(duì)word文件處理 

  1. public static void main(String[] args) { 
  2.         try { 
  3.             SocketClient socketClient = new SocketClient(); 
  4.             // 將文檔轉(zhuǎn)換成pdf文件 
  5.             socketClient.processOffice("D:/2.doc","D:/2.pdf",YOZOOfficeUtil.PROCESS_TYPE_CONVERTFILE,null); 
  6.  
  7.             // 替換模板中的書(shū)簽值,word中插入書(shū)簽自行百度 
  8.             JSONObject dataObject = new JSONObject(); 
  9.             dataObject.element("bookmarkname","這個(gè)是測(cè)試呢日哦那個(gè)"); 
  10.             socketClient.processOffice("D:/2.doc","D:/3.doc",YOZOOfficeUtil.PROCESS_TYPE_REPLACEBOOKMARK,dataObject); 
  11.         } catch (Exception e) { 
  12.             LOGGER.error("異常:",e); 
  13.  
  14.         } 
  15.  
  16.     } 

7、資源下載

word文件處理組件服務(wù)端(開(kāi)箱即用):

鏈接:https://pan.baidu.com/s/1_ZgjoX_nuv3a7_SKkJ_D7w 提取碼: hn2r 

 服務(wù)端資源內(nèi)容 

將文件復(fù)制到linux服務(wù)器,并解壓,執(zhí)行 ./ofdServer.sh ,輸出:服務(wù)端啟動(dòng),監(jiān)聽(tīng)端口為:8899,即運(yùn)行成功

word文件處理組件客戶端(開(kāi)箱即用processOffice):

鏈接:https://pan.baidu.com/s/1mtabGY87RuAGGkwKrBIvfQ 提取碼: mqxf 


客戶端資源文件內(nèi)容 

將源文件復(fù)制到項(xiàng)目指定包名,運(yùn)行SocketClient.java中的main方法,可查看運(yùn)行結(jié)果。

最重要的一點(diǎn):服務(wù)器要安裝永中OFFICE客戶端

 

責(zé)任編輯:未麗燕 來(lái)源: 今日頭條
相關(guān)推薦

2009-11-16 12:17:46

PHP上傳文件類型

2023-11-03 18:09:31

sed文件屬性

2009-09-11 08:47:03

Linux系統(tǒng)批量替換文件Linux

2010-03-10 09:27:36

Linux鏈接文件類型

2010-01-05 15:32:33

2010-03-01 15:34:38

Linux文件類型

2012-05-21 23:43:31

Java

2009-10-21 10:50:59

Linux文件類型

2010-01-12 11:37:06

Linux常見(jiàn)文件

2009-11-09 13:31:09

WCF服務(wù)端配置

2009-07-24 10:23:07

WORD文件轉(zhuǎn)換PDFASP.NET

2010-04-02 13:15:01

Oracle跟蹤

2010-05-21 10:02:56

2011-06-01 10:48:28

Android系統(tǒng)

2009-08-12 16:44:13

.NET文件類型

2017-06-09 06:14:41

2011-05-25 16:44:01

JavaScriptCSS

2021-02-05 08:03:52

Java

2019-04-12 14:26:17

Linux命令文件

2010-02-24 15:42:03

WCF服務(wù)端安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)