一样的代码,高手救命。

解决方案 »

  1.   

    是在服务端打,我用webservice访问服务端,要求服务端打印机打印出来。
      

  2.   

    什么异常也没有,catch过了,代码正常执行,就是没有打印出来,同样的代码写在程序里面又可以打印。
      

  3.   

    我用的是虚拟打印机Microsoft Office Document Image Writer,不知是不是这个问题,还有我没有用jasperreport,手写了一段打印代码,发现,那段打印代码被挂住了。是不是不能在tomcat下打印啊。
      

  4.   

    tomcat没有问题,是你的程序或者设置出了问题
      

  5.   

    把你的打印代码贴出来看看吧。tomcat 运行的时候,会把一些标准设备做转向(比如 System.out 等),使得对这些设备的访问跟 console application 运行的时候不太一样。
      

  6.   

    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);
    }
      

  7.   

    不好意思,因为程序不是很完整,我就先不实战了。先就我看到的提一个思路吧:你能保证 print() 方法不抛出异常吗?因为 print() 里面用到了 (Graphics2D)graphics 之类的东西,有可能会出问题的。怀疑的理由是,tomcat 不同于 GUI 程序,有可能因为 L&F 未初始化等原因,造成某些 GUI 的类(比如 Graphics2D)不可用。纯粹是猜的,你先在 print() 里面做个 try-catch 试试看,不行再说。
      

  8.   

    我全部都catch了,见上面的代码
      

  9.   

    > 我全部都catch了,见上面的代码你那种 catch 是没有用的。你的 tt 是一个 Inner Class,它的 print() 方法是在另外一个线程(也许就是打印池)中运行的,你这里的 try-catch 拦不住它。你要在 print() 方法“内部”做 try-catch,然后打印点什么东西出来看看。或者,如果能在调试环境下跑的话,设个断点,单步跟一跟。
      

  10.   

    我也遇到相同的问题!我用Ireport做的jasper报表!在netbean下可以打印!在tomcat下不能打印!是什么原因呢?
      

  11.   

    我把你的程序跑了一遍,初步认为,也许跟运行环境有关,但问题出在程序上。我是在 Eclipse 里做了一个 console application 来跑这段代码,现象也是被“挂”住了。你在 Printable 的 print() 里总是 return 0; 这不合适吧?return 0 的意思是 return PAGE_EXISTS; 如果总是这样的话,你的 print() 就会反复被调用,pageIndex 一直在增加。你应该在适当的时候 return NO_SUCH_PAGE;不知道这对你有没有用,反正我是这么改的,然后程序就跑出来了。(不过,打印出来都是白纸,我也没仔细检查)
      

  12.   

    谢谢楼上的,Eclipse里跑可以,有没有试试tomcat呀,谢了