java调用虚拟打印机,该怎么解决

java调用虚拟打印机
要实现  将上传的word 或者 excel 在下载过程中,可以调用虚拟打印机,输出 PDF 格式。具体怎么操作和代码编写。求大神指点啊、。。急急急
------解决思路----------------------


public void saveExcelAsPdf(String filePath, String outFile) 
throws SystemException {
ComThread.InitSTA();
ActiveXComponent actcom = new ActiveXComponent("Excel.Application");
Dispatch workbooks = null;
Dispatch workbook = null;

try {
actcom.setProperty("Visible", new Variant(false));

workbooks = actcom.getProperty("Workbooks").toDispatch();
workbook = Dispatch.invoke(
workbooks,
"Open",
Dispatch.Method,
new Object[] { filePath, 
new Variant(false),
new Variant(false) //readonly
}, new int[9]).toDispatch();


Dispatch.invoke(workbook, "SaveAs", Dispatch.Method, new Object[] {
outFile, new Variant(57), new Variant(false),
new Variant(57), new Variant(57), new Variant(false),
new Variant(true), new Variant(57), new Variant(false),
new Variant(true), new Variant(false) }, new int[1]);

Dispatch.call(workbook, "Close", new Object[] { new Variant(false) });
if (actcom != null) {
actcom.invoke("Quit", new Variant[] {});
actcom = null;
}
ComThread.Release();

} catch (Exception e) {
throw new SystemException(e.getMessage());
} finally {
if (actcom != null) {
actcom.invoke("Quit", new Variant[] {});
actcom = null;
}
ComThread.Release();
}
}


public  static void  print(String path)throws SystemException {   
String PRINT_NAME="xxxxxxxxx";//打印机名称
//初始化COM线程
        ComThread.InitSTA();
        ActiveXComponent xl=new ActiveXComponent("Excel.Application");
        try { 
        
            //设置是否显示打开Excel  
            Dispatch.put(xl, "Visible", new Variant(true));
            //打开具体的工作簿
            Dispatch workbooks = xl.getProperty("Workbooks").toDispatch(); 
            Dispatch excel=Dispatch.call(workbooks,"Open",path).toDispatch(); 
            
            //设置打印属性并打印
            Dispatch.callN(excel,"PrintOut",new Object[]{Variant.VT_MISSING, Variant.VT_MISSING, new Integer(1),
                    new Boolean(false),PRINT_NAME, new Boolean(true),Variant.VT_MISSING, ""});
            
            //关闭文档
           Dispatch.call(excel, "Close", new Variant(false));  
        } catch (Exception e) { 
            e.printStackTrace();
            throw new SystemException(e.getMessage());
        } finally{
            xl.invoke("Quit",new Variant[0]);
            //始终释放资源 
            ComThread.Release(); 
        } 
}





word 也差不多,具体很多参数去网上搜搜看看。