最近搞了一个java发送传真顺序,在网上搜了半天,没找到详细的例子,最初找到了国外的开源技术jacob,才处理了这个问题。
环境要求:windows xp系统,jdk 1.4(不要太高或太低,不然会发生与dll不匹配),运转java顺序的机器需求有猫及驱动(一般的猫都会支持fax功用),jacob版本1.9(最好运用这个版本,其他版本会报错),xp本身可以通过猫发送传真(确认一下环境可以发送传真即可)
完成功用:java jni调用本地jacob.dll,jacob.dll中封装好的接口调用本地服务(如excel、outlook、vbscript等) faxserver.faxserver.1,完成服务器端发送传真。
步骤:
1 将jacob.dll文件拷贝到windows/system32下
2 创立java项目,将jacob.jar,jacob.dll放到项目lib途径下,同时将他们也放到jdk的lib途径下
3 编写顺序(可参考jacob官方的api文档 5a520 ),如下:
import com.jacob.activeX.ActiveXComponent;import com.jacob.ComThread;import com.jacob.Dispatch;import com.jacob.DispatchEvents;import com.jacob.Variant;
public class faxtest {
public void sendFax(String filename,Sring faxnumber) {ActiveXComponent objFax = new ActiveXComponent("FaxServer.FaxServer.1");//这个名字一般要与注册表里fax服务名匹配对了
Dispatch faxObject = objFax.getObject();
Dispatch.call(faxObject, "Connect", "");Dispatch doc = Dispatch.call(faxObject, "CreateDocument", filename).toDispatch();Dispatch.put(doc, "RecipientName", "someone");Dispatch.put(doc, "FaxNumber", faxnumber); //注意电话号码的格式Dispatch.put(doc, "DisplayName", "zhupan");Dispatch.call(doc, "Send");Dispatch.call(faxObject, "DisConnect");}
public static void main(String[] args) {
try {faxtest faxDocumentProperties = new faxtest();faxDocumentProperties.sendFax(" bt285 /WW.doc",
艾维家纺旗舰店"028886666");System.out.print("ok fax transfer successfully !");} catch (Exception e) {System.out.println(e);}}
} 4 调试,假设报错"no progid"异常,一般问题都是jdk与dll不匹配,或许传真服务名称(FaxServer.FaxServer.1)不匹配。