jasperreports 在程序里面能输出到打印机,在tomcat里面不能,为什么? 一样的代码,高手救命。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是在服务端打,我用webservice访问服务端,要求服务端打印机打印出来。 什么异常也没有,catch过了,代码正常执行,就是没有打印出来,同样的代码写在程序里面又可以打印。 我用的是虚拟打印机Microsoft Office Document Image Writer,不知是不是这个问题,还有我没有用jasperreport,手写了一段打印代码,发现,那段打印代码被挂住了。是不是不能在tomcat下打印啊。 tomcat没有问题,是你的程序或者设置出了问题 把你的打印代码贴出来看看吧。tomcat 运行的时候,会把一些标准设备做转向(比如 System.out 等),使得对这些设备的访问跟 console application 运行的时候不太一样。 try { String printStr = "print test"; int PAGES = 1;//getPagesCount(printStr); //获取打印总页数 //指定打印输出格式 DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;// DocFlavor flavor = DocFlavor.URL.TEXT_HTML_HOST; //定位默认的打印服务 PrintService printService = PrintServiceLookup.lookupDefaultPrintService();// PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, null);// for (int i = 0; i < ps.length; i++) {// System.out.println(ps[i].getName());// } //创建打印作业 DocPrintJob job = printService.createPrintJob(); //设置打印属性 PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); DocAttributeSet das = new HashDocAttributeSet(); class tt implements Printable { public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { String s = "hello Printer";//获取当前页的待打印文本内容 //获取默认字体及相应的尺寸 FontRenderContext context = ((Graphics2D) graphics).getFontRenderContext(); Font f = graphics.getFont(); String drawText; float ascent = 16; //给定字符点阵 int k, i = f.getSize(), lines = 0; while(s.length() > 0 && lines < 54) //每页限定在54行以内 { k = s.indexOf('\n'); //获取每一个回车符的位置 if (k != -1) //存在回车符 { lines += 1; //计算行数 drawText = s.substring(0, k); //获取每一行文本 ((Graphics2D) graphics).drawString(drawText, 0, ascent); //具体打印每一行文本,同时走纸移位 if (s.substring(k + 1).length() > 0) { s = s.substring(k + 1); //截取尚未打印的文本 ascent += i; } } else //不存在回车符 { lines += 1; //计算行数 drawText = s; //获取每一行文本 ((Graphics2D) graphics).drawString(drawText, 0, ascent); //具体打印每一行文本,同时走纸移位 s = ""; //文本已结束 } } return 0; } } //指定打印内容 Doc doc = new SimpleDoc(new tt(), flavor, das); //不显示打印对话框,直接进行打印工作 job.print(doc, pras); //进行每一页的具体打印操作 } catch (Throwable e) { e.printStackTrace(System.out); } 不好意思,因为程序不是很完整,我就先不实战了。先就我看到的提一个思路吧:你能保证 print() 方法不抛出异常吗?因为 print() 里面用到了 (Graphics2D)graphics 之类的东西,有可能会出问题的。怀疑的理由是,tomcat 不同于 GUI 程序,有可能因为 L&F 未初始化等原因,造成某些 GUI 的类(比如 Graphics2D)不可用。纯粹是猜的,你先在 print() 里面做个 try-catch 试试看,不行再说。 我全部都catch了,见上面的代码 > 我全部都catch了,见上面的代码你那种 catch 是没有用的。你的 tt 是一个 Inner Class,它的 print() 方法是在另外一个线程(也许就是打印池)中运行的,你这里的 try-catch 拦不住它。你要在 print() 方法“内部”做 try-catch,然后打印点什么东西出来看看。或者,如果能在调试环境下跑的话,设个断点,单步跟一跟。 我也遇到相同的问题!我用Ireport做的jasper报表!在netbean下可以打印!在tomcat下不能打印!是什么原因呢? 我把你的程序跑了一遍,初步认为,也许跟运行环境有关,但问题出在程序上。我是在 Eclipse 里做了一个 console application 来跑这段代码,现象也是被“挂”住了。你在 Printable 的 print() 里总是 return 0; 这不合适吧?return 0 的意思是 return PAGE_EXISTS; 如果总是这样的话,你的 print() 就会反复被调用,pageIndex 一直在增加。你应该在适当的时候 return NO_SUCH_PAGE;不知道这对你有没有用,反正我是这么改的,然后程序就跑出来了。(不过,打印出来都是白纸,我也没仔细检查) 谢谢楼上的,Eclipse里跑可以,有没有试试tomcat呀,谢了 真诚请教(关于java数据) combo的item如何从数据库中获取 怎样获取mp3文件的播放时间? 关于打包后工具栏图标不能正常显示 求助 附上源码 我有一个问题??? 高分求教,有没有类似CuteFTP那样的开源软件,传输(上传)文件的,不过通过的是HTTP协议,而不是FTP协议.. 一个奇怪的异常!!!! 请问架设jsp服务器去哪里咨询比较好? 按钮如何获得焦点并按回车触发? 【菜鸟求解】判断给定字符串的内容是否全部都是英文字母,若其中包含其它字符,则抛出一个异常 高手帮我看一下这个java错误说明了什么?? 网络编程!!!!!!!
String printStr = "print test";
int PAGES = 1;//getPagesCount(printStr); //获取打印总页数
//指定打印输出格式
DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
// DocFlavor flavor = DocFlavor.URL.TEXT_HTML_HOST;
//定位默认的打印服务
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
// PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, null);
// for (int i = 0; i < ps.length; i++) {
// System.out.println(ps[i].getName());
// }
//创建打印作业
DocPrintJob job = printService.createPrintJob();
//设置打印属性
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
DocAttributeSet das = new HashDocAttributeSet();
class tt implements Printable { public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
String s = "hello Printer";//获取当前页的待打印文本内容
//获取默认字体及相应的尺寸
FontRenderContext context = ((Graphics2D) graphics).getFontRenderContext();
Font f = graphics.getFont();
String drawText;
float ascent = 16; //给定字符点阵
int k, i = f.getSize(), lines = 0;
while(s.length() > 0 && lines < 54) //每页限定在54行以内
{
k = s.indexOf('\n'); //获取每一个回车符的位置
if (k != -1) //存在回车符
{
lines += 1; //计算行数
drawText = s.substring(0, k); //获取每一行文本
((Graphics2D) graphics).drawString(drawText, 0, ascent); //具体打印每一行文本,同时走纸移位
if (s.substring(k + 1).length() > 0)
{
s = s.substring(k + 1); //截取尚未打印的文本
ascent += i;
}
}
else //不存在回车符
{
lines += 1; //计算行数
drawText = s; //获取每一行文本
((Graphics2D) graphics).drawString(drawText, 0, ascent); //具体打印每一行文本,同时走纸移位
s = ""; //文本已结束
}
}
return 0;
}
}
//指定打印内容
Doc doc = new SimpleDoc(new tt(), flavor, das);
//不显示打印对话框,直接进行打印工作
job.print(doc, pras); //进行每一页的具体打印操作
} catch (Throwable e) {
e.printStackTrace(System.out);
}