package com.doumee.core.annotation.excel;import java.io.*; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.PdfWriter; public class ExcelToPdfToolNewSev { /** * 使用jacob实现excel转PDF * * @param inputFilePath 导入Excel文件路径 * @param outputFilePath 导出PDF文件路径 */ public static void jacobExcelToPDF(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:\\2.xlsx"; String outputPdfPath = "D:\\22.pdf"; jacobExcelToPDF(inputExcelPath, outputPdfPath); } }