java调用打印机打印问题求解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java调用打印机打印问题求解相关的知识,希望对你有一定的参考价值。
/**
* 打印Excel
* @param path
* @param printerName
* @throws Exception
*/
public static void print(String path, String printerName)
throws Exception
ComThread.InitSTA();
ActiveXComponent xl = new ActiveXComponent("Excel.Application");
try
Dispatch workbooks = xl.getProperty("Workbooks").toDispatch();
Dispatch workbook = Dispatch.call(workbooks, "Open", path).toDispatch();
Dispatch.callN(workbook, "PrintOut", new Object[]
Variant.VT_MISSING, Variant.VT_MISSING, new Integer(1),
new Boolean(false), printerName, new Boolean(true),
Variant.VT_MISSING, "" );
Dispatch.call(workbook, "Close");
catch (Exception e)
e.printStackTrace();
throw e;
finally
xl.invoke("Quit", new Variant[] );
ComThread.Release();
这是打印方法,我用main方法调用这个方法能成功的打印出来,但是用我页面调用(弄个button访问后台方法),就不能打印了,这是怎么回事?
ComThread.InitSTA();到这个就不往下面走了
ComThread这个类被封在jar中了?追问
对的,这个问题我已经解决了,但是推翻重做了,不用这个了,最终可以打印的,但是只能是服务器端的那台机子连着打印机方可打印,客户端是打印不了的。唉
追答嗯,这个是正常的。
你用网页的话,肯定是向服务器端发送请求,所有的java代码都是在服务器端运行,
所以打印只能在服务器端进行,是正常的。
网页的打印方式有两种。
1.用浏览器打开你要打印的文件,调用浏览器的打印功能。(当然,这个也得是用户自己去点。用javascript好象也可以实现,但不是很把握,有可能会受安全限制而出问题)
2.下载文件到本地,让用户自己去打印。
我开始以为 ComThread 运行是被阴塞了,后来发现是init方法,所以问你类的内容是什么,
现在想来,可能是连接打印机的地方出了问题。
我 估计 ComThread这个类中,连接打印机是本机的,而不是网络的,你看看这个类有没有set方法可以设置打印机路径的,这样,你的WEB服务器可以连接打印服务器,进行打印,不用WEB服务器安装打印机。(当然这只是个猜测)
总得来说,不能直接实现WEB客户端实现打印。
我现在用的就是调用浏览器的打印的功能,让用户自己去点,这样做不能实现批量打印让我很纠结
ComThread 卡在这是因为我tomcat没有加载jacob.dll跟jar,把他们放在bin目录下就可以了,其实服务器端打印很有局限性。但是可以满足局域网内需求,比如就一个公司这个项目,可以把服务器的打印机配置到别的打印机上,没试过,不过我想应该是可以的,外网访问这项目就不行了
别纠结了,
B/S的就是这样,你看WEB页的有几个是可以批量打印的,这又不是C/S
好象WEB的也可以实现,但性能会差很多,以前关注过一阵这方面的,后来不怎么适用。
也没有开发任务,就放下了。
这个问题的分给我呗,呵呵
哈哈,肯定给你
追答:P
以后有问题,再一起讨论
java调用博思得打印机的心得
转载:http://www.zuidai和ma.com/blog/2793091475983360.htm
www.zuidai ma.com居然是违禁字符,我也是醉了,所以在www.zuidai后面加一个和字。
曾经公司的项目 让我弄个一个二维码的打印 客户要求选择博思得品牌打印机 我试过调用java里面的打印机的api 可惜打印机可以运行了 但是打印不出图片 我也研究很多关于打印的东西 发现还是不行 后来找到他们技术 他们推荐我使用c/s 调用他们提供的dll
可是我发现还是出现问题 到最后我才发现原来他们的打印机只支持单色的bmp格式图片 然后我只能把图片先转成bmp 终于成功了 。 我使用的是JNative的包
下面提供下代码给大家参考下:
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
public class javaDll {
/**
* @param args
*对于各个方法没做进一步的处理,只是抛异常而已。
*执行Main函数可正常打印一张图片
*/
static final String DLL_FILE = "D:\\CDFPSK.dll";
public String OpenPort(int xx) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "OpenPort");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.setParameter(0, xx);
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String SetPCComPort(int BaudRate,boolean HandShake) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "SetPCComPort");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String GetErrState() throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "GetErrState");
jn_handler.setRetVal(Type.VOID); // 指定返回参数的类型
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String PTK_GetInfo() throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "PTK_GetInfo");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String PTK_DrawTextTrueTypeW(int x,int y,int FHeight,int FWidth,String FType,int Fspin,int FWeight,int FLtatlic, int FUnline, int FStrikeOut,String id_name, String data ) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "PTK_DrawTextTrueTypeW");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.setParameter(0, x);
jn_handler.setParameter(1, y);
jn_handler.setParameter(2, FHeight);
jn_handler.setParameter(3, FWidth);
jn_handler.setParameter(4, FType);
jn_handler.setParameter(5, Fspin);
jn_handler.setParameter(6, FWeight);
jn_handler.setParameter(7, FLtatlic);
jn_handler.setParameter(8, FUnline);
jn_handler.setParameter(9, FStrikeOut);
jn_handler.setParameter(10, id_name);
jn_handler.setParameter(11, data);
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String PTK_PrintLabel(int number,int cpnumber) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "PTK_PrintLabel");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.setParameter(0, number);
jn_handler.setParameter(1, cpnumber);
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String PTK_BmpGraphicsDownload(String pxname,String pypath,int iDire) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "PTK_BmpGraphicsDownload");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.setParameter(0, pxname);
jn_handler.setParameter(1, pypath);
jn_handler.setParameter(2, iDire);
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String PTK_BinGraphicsDownload(String pxname,String pbyte ,int iDire,char[] buff) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "PTK_BmpGraphicsDownload");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.setParameter(0, pxname);
jn_handler.setParameter(1, pbyte);
jn_handler.setParameter(2, iDire);
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String PTK_DrawPcxGraphics(int px,int py,String name) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "PTK_DrawPcxGraphics");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.setParameter(0, px);
jn_handler.setParameter(1, py);
jn_handler.setParameter(2, name);
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String PTK_PcxGraphicsDel(String pid) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "PTK_PcxGraphicsDel");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.setParameter(0, pid);
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String PTK_RWRFIDLabel(int a,int b,int c,int d,int f,String ff) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "PTK_RWRFIDLabel");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.setParameter(0, a);
jn_handler.setParameter(1, b);
jn_handler.setParameter(2, c);
jn_handler.setParameter(3, d);
jn_handler.setParameter(4, f);
jn_handler.setParameter(5, ff);
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String PTK_SetLabelHeight(int height,int gapH) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "PTK_SetLabelHeight");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.setParameter(0, height);
jn_handler.setParameter(1,gapH);
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String PTK_SetLabelWidth(int width) throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "PTK_SetLabelWidth");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.setParameter(0, width);
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public String ClosePort() throws NativeException,
IllegalAccessException {
JNative jn_handler = null;
jn_handler = new JNative(DLL_FILE, "ClosePort");
jn_handler.setRetVal(Type.INT); // 指定返回参数的类型
jn_handler.invoke(); // 调用方法
return jn_handler.getRetVal();
}
public static void main(String[] args) throws NativeException, IllegalAccessException {
// TODO Auto-generated method stub
System.out.println(new javaDll().OpenPort(255));
// System.out.println(new javaDll().PTK_DrawTextTrueTypeW (30,35,24,0,"宋体",4,400,0,0,0,"A1","机要绝密"));
System.out.println(new javaDll().PTK_SetLabelHeight(-300,24));
System.out.println(new javaDll().PTK_SetLabelWidth(0));
//System.out.println(new javaDll().PTK_RWRFIDLabel(1,0,2,12,1,"123131312312"));
System.out.println(new javaDll().PTK_PcxGraphicsDel("Bag"));
System.out.println(new javaDll().PTK_BmpGraphicsDownload("Bag","D:\\001.bmp",0));//将一张图片打印
System.out.println(new javaDll().PTK_DrawPcxGraphics(0,30,"Bag"));
System.out.println(new javaDll().PTK_PrintLabel(1,1));
// System.out.println(new javaDll().SetPCComPort(9600, true));
// System.out.println(new javaDll().PTK_GetInfo());
}
}
以上是关于java调用打印机打印问题求解的主要内容,如果未能解决你的问题,请参考以下文章
用java中的while循环打印乘法口诀表,不要for循环的求解
TML 打印预览问题,怎么设置有些内容不出现在打印预览页面上。怎么控制,有下代码 看得不是很懂 求解释
打印机显示getLodop出错:ReferenceError: LODOP is not defined 是啥原因,求解,