亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

java使用jacob實現word轉pdf

2024-07-14 08:43:15
字體:
來源:轉載
供稿:網友

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

準備工作:

1.服務器需要安裝office2007,因為我們就是調用這個來實現轉換。
2.需要安裝插件jacob,安裝jacob-1.14.3-x86.dll到jdk/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.假如通過以上準備工作未成功轉換,就下載一個SaveAsPDFandXPS.exe組件(office2007里的)。我就是通過這個組件才完成轉換。

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

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

 

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轉換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 {        //調用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("轉換文檔到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("轉換完成..用時:" + (end - start) + "ms.");                    } catch (Exception e) {         System.out.println("========Error:文檔轉換失敗:" + e.getMessage());       } finally {       Dispatch.call(doc,"Close",false);       System.out.println("關閉文檔");       if (app != null)           app.invoke("Quit", new Variant[] {});         }      //如果沒有這句話,winword.exe進程將不會關閉       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();  } /**   * 將圖片文件轉化為字節數組字符串,并對其進行Base64編碼處理   * @param imgFilePath 圖片地址路徑   */  public static String GetImageStr(String imgFilePath) {//     byte[] data = null;         // 讀取圖片字節數組    try {     InputStream in = new FileInputStream(imgFilePath);     data = new byte[in.available()];     in.read(data);     in.close();    } catch (IOException e) {     e.printStackTrace();    }         // 對字節數組Base64編碼    BASE64Encoder encoder = new BASE64Encoder();    return encoder.encode(data);// 返回Base64編碼過的字節數組字符串   }      /**    * 將二進制轉換為圖片    *    * @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();     }   } }

二、業務類(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) { //創建一個Configuration的實例 Configuration configuration = new Configuration(); //設置編碼 configuration.setDefaultEncoding("utf-8"); //創建Map對象,來保存要填寫的數據 Map<String, Object> paraMap = new HashMap<String, Object>(); //下面這些是我測試的一些數據 paraMap.put("ReceivingParty", "中國民航");  paraMap.put("PackingListNo", 10087);  paraMap.put("ConNo", 10088);  try {  //調用模板的文件夾,new File("D://測試")是一個絕對路徑,你可以自己設置為服務器路徑。  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://最終");  //判斷文件夾是否存在,存在刪除并重創 if (!file .exists() && !file .isDirectory())    {       file.mkdir();   } else   {   boolean b = OperationIO.deleteDir(file);  if(b){  file.mkdir();  } }  //填寫數據后生成的word文件。 String outfilepath = "D:/最終//結果"+".doc"; File outFile = new File(outfilepath); // 導出文件 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); // 將填充數據填入模板文件并輸出到目標文件  out.flush();  out.close();  //轉換PDF的文件  OperationIO.wordToPDF(outfilepath,"D:/最終//結果"+".pdf"); } catch (TemplateException e) {  e.printStackTrace(); } catch (IOException e) {  e.printStackTrace(); } }}

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲激情第一页| 亚洲男人av在线| 在线电影av不卡网址| 久久琪琪电影院| 尤物九九久久国产精品的特点| 日韩欧美成人网| 亚洲激情视频在线| 第一福利永久视频精品| 欧美激情综合亚洲一二区| 成人免费高清完整版在线观看| 亚洲精品视频中文字幕| 亚洲天堂av网| 亚洲国产精品久久精品怡红院| 亚洲欧洲在线视频| 久久综合免费视频影院| 国产精品久久久久久中文字| 91欧美精品午夜性色福利在线| 欧美日韩免费一区| 8x拔播拔播x8国产精品| 蜜臀久久99精品久久久久久宅男| 日韩人体视频一二区| 欧美精品第一页在线播放| 热久久免费国产视频| 福利视频导航一区| 国产视频精品xxxx| 亚洲国产精品一区二区久| 欧美高清在线播放| 日韩精品在线免费| 亚洲精品电影在线| 国产精品日本精品| 97高清免费视频| 日韩小视频在线| 精品国产福利在线| 97香蕉久久夜色精品国产| 成人美女av在线直播| 亚洲午夜av电影| 中文字幕在线国产精品| 午夜精品久久久久久99热| 成人福利视频在线观看| 精品成人久久av| 日韩电影中文字幕在线观看| 成人做爽爽免费视频| 国产精品自产拍在线观| 国产在线视频欧美| 韩曰欧美视频免费观看| 国产精品视频xxx| 日韩av色在线| 国产91精品网站| 欧美肥老妇视频| 92看片淫黄大片欧美看国产片| 在线免费观看羞羞视频一区二区| 久久免费视频在线观看| 国产亚洲精品美女久久久| 亚洲男人7777| 亚洲第一精品自拍| 久久久免费精品| 国产精品久久久久久久电影| 精品国产福利视频| 国产日产亚洲精品| 亚洲午夜久久久影院| 成人免费福利在线| 亚洲欧美国产精品| 久久久久久中文| 97超级碰碰碰久久久| 97视频com| 国产精品99久久久久久久久久久久| 久久久精品免费| 奇米成人av国产一区二区三区| 欧美成人精品不卡视频在线观看| 美女久久久久久久久久久| 在线精品国产成人综合| 欧美又大粗又爽又黄大片视频| 国产丝袜一区视频在线观看| 国产亚洲aⅴaaaaaa毛片| 国产精品美女www| 69久久夜色精品国产69| 欧美精品激情视频| 国产一区欧美二区三区| 国产高清在线不卡| www.日本久久久久com.| www.日韩系列| 久久精品一本久久99精品| 久久国产精品电影| 91av在线精品| 欧美成人午夜视频| 97久久久免费福利网址| 中文字幕av日韩| 4438全国亚洲精品在线观看视频| 精品日韩中文字幕| 亚洲欧洲日韩国产| 国产精品久久久久9999| 欧美午夜丰满在线18影院| 中文字幕亚洲天堂| 日韩美女主播视频| 国产精品久久久久77777| 国产一区二区三区丝袜| 91成人在线视频| 中文国产成人精品久久一| 久久韩剧网电视剧| 日韩欧美在线免费观看| 国产亚洲欧美另类中文| 自拍偷拍亚洲区| 亚洲午夜国产成人av电影男同| 亚洲成人网av| 日韩高清a**址| 国产精品日韩欧美综合| 亚洲欧洲国产精品| 国内精品视频在线| 一区二区三区国产在线观看| 久久精品久久精品亚洲人| 成人美女av在线直播| 懂色av影视一区二区三区| 日本精品久久久| 亚洲女人天堂成人av在线| 国产偷国产偷亚洲清高网站| 亚洲精品wwww| 国产亚洲激情视频在线| 91美女片黄在线观| 欧美天天综合色影久久精品| 欧美激情网友自拍| 成人国产精品一区| 深夜福利亚洲导航| 久久久免费av| 久久久精品视频成人| 福利视频一区二区| 久久深夜福利免费观看| 国产精品综合久久久| 美女黄色丝袜一区| 中文字幕国产精品| 九九热r在线视频精品| 国产在线观看精品一区二区三区| 日韩精品一区二区视频| 精品无人区乱码1区2区3区在线| 亚洲欧美精品中文字幕在线| 国产色视频一区| 国产视频在线观看一区二区| 91产国在线观看动作片喷水| 97国产成人精品视频| 国产精品狼人色视频一区| 97久久久免费福利网址| 日韩在线精品一区| 国产精品自拍偷拍视频| 欧美高清电影在线看| 九九久久综合网站| 有码中文亚洲精品| 欧美色xxxx| 欧美猛男性生活免费| 欧美日韩在线第一页| 秋霞午夜一区二区| 亚洲黄页网在线观看| 日韩有码片在线观看| 国产精品热视频| 久久6精品影院| 亚洲最大中文字幕| 成人久久一区二区| 91精品国产综合久久香蕉922| 欧美高清视频免费观看| 欧美性猛交xxxx久久久| 97久久精品人人澡人人爽缅北| 中文字幕亚洲专区| 一区二区三区视频在线| 欧美国产日韩中文字幕在线| 欧美午夜激情在线| 日韩国产一区三区|