| package com.doumee.core.annotation.excel; | 
|   | 
| import com.jacob.activeX.ActiveXComponent; | 
| import com.jacob.com.ComThread; | 
| import com.jacob.com.Dispatch; | 
| import com.jacob.com.Variant; | 
|   | 
|   | 
| public class ExcelToPdfToolNew { | 
|   | 
|     /** | 
|      * 使用jacob实现excel转PDF | 
|      * | 
|      */ | 
|   | 
|     public static void excelToPdf(String inputFilePath, String outputFilePath) { | 
|         ActiveXComponent ax = null; | 
|         Dispatch excel = null; | 
|         try { | 
|             ComThread.InitSTA(); | 
|             ax = new ActiveXComponent("Excel.Application"); | 
|             ax.setProperty("Visible", new Variant(false)); | 
|             //        禁用宏 | 
|             ax.setProperty("AutomationSecurity", new Variant(3)); | 
|             Dispatch excels = ax.getProperty("Workbooks").toDispatch(); | 
|             Object[] obj = { | 
|                     inputFilePath, | 
|                     new Variant(false), | 
|                     new Variant(false) | 
|             }; | 
|             excel = Dispatch.invoke(excels, "Open", Dispatch.Method, obj, new int[9]).toDispatch(); | 
|             Dispatch currentSheet = Dispatch.get(excel, | 
|                     "ActiveSheet").toDispatch(); | 
|             // 获取页面设置 | 
|             Dispatch pageSetup = Dispatch.get(currentSheet, "PageSetup") .toDispatch(); | 
|             Dispatch.put(pageSetup, "Orientation", new Variant(2)); | 
|             Dispatch.put(pageSetup, "FitToPagesTall", new Variant(0)); | 
|             Dispatch.put(pageSetup, "FitToPagesWide", new Variant(1)); | 
|             // 获取页面设置 | 
| //                Dispatch.put(pageSetup, "PaperSize", pageSize); | 
|             // 内容缩放 | 
| //                Dispatch.put(pageSetup, "Zoom", new Variant(false)); | 
|   | 
|             //                Dispatch Application = Dispatch.get(currentSheet, "Application") .toDispatch(); | 
| //                Dispatch.put(pageSetup, "PaperSize", pageSize); | 
| //                Dispatch.put(Application, "ActivePrinter", "Microsoft Print to PDF"); | 
|             // 内容缩放 | 
| //                Dispatch.put(pageSetup, "Orientation", new Variant(2)); | 
| //                Dispatch.put(pageSetup, "Zoom", new Variant(false)); | 
| //                Dispatch.put(pageSetup, "FitToPagesWide", new Variant(1)); | 
| //                Dispatch.put(pageSetup, "FitToPagesTall", new Variant(1)); | 
|   | 
| //                Dispatch.put(pageSetup, "PaperSize",  new Variant(8)); // A3是8,A4是9,A5是11等等 | 
|   | 
|             //        转换格式 | 
|             Object[] obj2 = { | 
|                     //                PDF格式等于0 | 
|                     new Variant(0), | 
|                     outputFilePath, | 
|                     //                0=标准(生成的PDF图片不会模糊),1=最小的文件 | 
|                     new Variant(0) | 
|             }; | 
|             Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, obj2, new int[1]); | 
|         } catch (Exception e) { | 
|             e.printStackTrace(); | 
|             throw e; | 
|         } finally { | 
|             if (excel != null) { | 
|                 Dispatch.call(excel, "Close", new Variant(false)); | 
|             } | 
|             if (ax != null) { | 
|                 ax.invoke("Quit", new Variant[]{}); | 
|                 ax = null; | 
|             } | 
|             ComThread.Release(); | 
|         } | 
|     } | 
|   | 
|     public static void main(String[] args) { | 
|         String inputExcelPath = "D:\\4.xlsx"; | 
|         String outputPdfPath = "D:\\44.pdf"; | 
|   | 
|         excelToPdf(inputExcelPath, outputPdfPath); | 
|     } | 
| } |