java 使用jacob插件打印excel

1.下载jacob插件
链接:百度网盘 请输入提取码
提取码:8wd7

2. 添加jar包到项目中

    2.1 第一种方式 可以将jar包放到项目

    2.2 第二种方式 将jar包放到maven仓库

3.将jar包中的两个dll文件添加到jre/bin目录下面

4.编写代码,执行测试类即可 

  方法的第一个参数为 文件地址,第二个参数为打印机名称

 注意:最好在excel文件中设置好打印机的属性,之后直接调用方法,就可以看到你想要的的打印效果

package com.seagetech.dawang.common.utils;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

import java.io.File;

/**
 * @program: api
 * @description: 打印机工具类
 * @author: tt_wang
 * @create: 2021-03-22 16:23
 **/
public class PrintUtils {



    /**
     * 打印Excel文件
     * @param filePath  文件路径
     */
    public static boolean printFileAction(String filePath,String  printerName){
        boolean returnFlg = false;

        try {
            ComThread.InitSTA();
            ActiveXComponent xl = new ActiveXComponent("Excel.Application");

            // 不打开文档
            Dispatch.put(xl, "Visible", new Variant(false));
            Dispatch workbooks = xl.getProperty("Workbooks").toDispatch();

            Object[] object = new Object[8];
            object[0] = Variant.VT_MISSING;
            object[1] = Variant.VT_MISSING;
            object[2] = Variant.VT_MISSING;
            object[3] = new Boolean(false);
            object[4] = printerName;
            object[5] = new Boolean(false);
            object[6] = Variant.VT_MISSING;
            object[7] = Variant.VT_MISSING;

            // 判断文件是否存在
            boolean fileExistFlg = fileExist(filePath);
            if (fileExistFlg) {
                Dispatch excel=Dispatch.call(workbooks,"Open",filePath).toDispatch();
                // 开始打印
                Dispatch.callN(excel,"PrintOut",object);
                returnFlg = true;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 始终释放资源
            ComThread.Release();
        }
        return returnFlg;
    }


    /**
     * 判断文件是否存在.
     * @param filePath  文件路径
     * @return
     */
    private static boolean fileExist(String filePath){
        boolean flag = false;
        try {
            File file = new File(filePath);
            flag = file.exists();
        }catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

    public static void main(String[] args) {
        PrintUtils.printFileAction("D:\\home\\CW02加工机\\20210323\\aa.xlsx","HP LaserJet MFP M129-M134 PCLm-S(网络)");
    }

}

5.关于一个web容器下面多个项目同时调用jacob.jar的底层方法,抛出  jacob-1.1.17-x64.dll already loaded in another classloader jacob

 解决方案

1.在tomcat\lib包下面添加jacob的jar包

2.手动删除各个web项目下lib库下面的jacob.jar包

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
JACOB里的总共有两个包: com jacob activeX:JACOB可以通过它调度(Dispatch)activeX 控件 com jacob com:JACOB通过它调用系统DLL (activeX是由微软公司推出的用于Internet的技术 以前曾经被称为OLE 和OCX activeX web插件可以用于各种非HTML的工作 比如 对MicrosoftExcel 或 MicrosoftWord 文件做操作 解析JS VB脚本 播放FA有一点可以确定的是在JACOB内部 com jacob activeX是建立在com jacob com之上的 而com jacob com中有一个很基础的类com jacob com JacobObject 其中比较常用的两个类com jacob com Dispatch和com jacob com Variant便是继承自它 (com jacob com Dispatch;里面提供了调度MS windows系统API 比如进程的管理 com jacob com Variant; 里面数据类型的转换的方法 Variant类本身是JACOB的最最基本的数据类 他可以被转换成任何的类 如: 使用toDispatch();可以将Variant转化成Dispatch对象 ) com jacob com中还有其他的一些类不是建立在JacobObject之上的 如com jacob com ComThread(负责COM线程管理 ) com jacob com所有的类 包括上面说到的JacobObject ComThread 都是通过com jacob com LibraryLoader中的loadJacobLibrary()方法: static { LibraryLoader loadJacobLibrary ; } 调用jacob dll内的方法 比如:Dispatch java就通过LibraryLoader和Dispatch h Dispatch cpp建立联系 从而建立起javajacob dll到jni的之间的联系 LSH 调用Microsoft MediaPlayer等 )">JACOB里的总共有两个包: com jacob activeX:JACOB可以通过它调度(Dispatch)activeX 控件 com jacob com:JACOB通过它调用系统DLL (activeX是由微软公司推出的用于Internet的技术 以前曾经被称为OLE 和OCX activeX web插件可以用于各 [更多]
使用jacobExcel转换为PDF并设置页边距的示例代码如下: ``` import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class ExcelToPdfConverter { public static void main(String[] args) { convertExcelToPdf("C:\\temp\\test.xlsx", "C:\\temp\\test.pdf"); } public static void convertExcelToPdf(String excelFile, String pdfFile) { ActiveXComponent excel = new ActiveXComponent("Excel.Application"); try { excel.setProperty("Visible", false); Dispatch workbooks = excel.getProperty("Workbooks").toDispatch(); Dispatch workbook = Dispatch.call(workbooks, "Open", excelFile).toDispatch(); Dispatch sheets = Dispatch.get(workbook, "Sheets").toDispatch(); Dispatch sheet = Dispatch.call(sheets, "Item", 1).toDispatch(); Dispatch pageSetup = Dispatch.get(sheet, "PageSetup").toDispatch(); Dispatch.put(pageSetup, "LeftMargin", new Variant(10)); Dispatch.put(pageSetup, "RightMargin", new Variant(10)); Dispatch.put(pageSetup, "TopMargin", new Variant(10)); Dispatch.put(pageSetup, "BottomMargin", new Variant(10)); Dispatch.call(sheet, "ExportAsFixedFormat", new Variant(0), pdfFile); Dispatch.call(workbook, "Close", new Variant(false)); } catch (Exception e) { e.printStackTrace(); } finally { excel.invoke("Quit", new Variant[]{}); } } } ``` 在上面的代码中,我们使用jacob库来打开Excel文件并将第一个sheet导出为PDF文件。我们使用Dispatch类来获取Excel对象的属性和方法。在设置页边距时,我们获取了PageSetup对象并使用put方法设置左、右、上、下边距的值。 注意:在使用jacob之前,您需要将jacob.dll文件添加到您的项目中,并将其路径添加到您的系统路径中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值