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