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); } }