我的公司在开发一个零售系统,使用PrintService打印小票,打印是正确了
可是结尾出现一大段空行,我调用了PageFormat的setSize方法设置高度,
可是没起作用。我查了一下官方文档,可能是属性没有设置或者是打印格式
不对(我设置的是ISO_A4)。哪位大虾知道的请指点一下,最好是给出事例代码,必须是打印象超市小票的那种。本人在线等候回复!!

解决方案 »

  1.   

    代码? 超市票据没打印过~如果是打印设置不对
     PrinterJob job = PrinterJob.getPrinterJob();
    job.printDialog(null)
    看看本地打印是否正确,正确的话研究下他的设置
      

  2.   

    我的实现代码如下: 
    public void print() throws Exception
    {
     DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
     PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
     DocPrintJob job = printService.createPrintJob();
     PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
     DocAttributeSet das = new HashDocAttributeSet();
     javax.print.Doc doc = new javax.print.SimpleDoc(this, flavor, das);
    
     try
     {
     job.print(doc,pras);
     }catch(Exception pe)
     {
     throw pe;
     }
     }
    }
    请个位看看哪里有错误,为什么打印结尾一块空白区域
      

  3.   

    打印的东西不同,我打印的是个TABLE,PRINT贴出来,让LZ参考下吧
         public int print(Graphics g, PageFormat pageFormat,
            int pageIndex) throws PrinterException {
            Graphics2D  g2 = (Graphics2D) g;
            g2.setColor(Color.black);
            //对字体进行设置
            int fontHeight=g2.getFontMetrics().getHeight();
            int fontDesent=g2.getFontMetrics().getDescent();        //leave room for page number
            double pageHeight =
              pageFormat.getImageableHeight()-fontHeight;
            double pageWidth =
              pageFormat.getImageableWidth();
            double tableWidth = (double)
              tableView.getColumnModel(
              ).getTotalColumnWidth();
            double scale = 1;
            if (tableWidth >= pageWidth) {
                    scale =  pageWidth / tableWidth;
            }        double headerHeightOnPage=
                     tableView.getTableHeader(
                     ).getHeight()*scale;
            double tableWidthOnPage=tableWidth*scale;        double oneRowHeight=(tableView.getRowHeight()+
                          tableView.getRowMargin())*scale;
            int numRowsOnAPage=
                  (int)((pageHeight-headerHeightOnPage)/
                                      oneRowHeight);
            double pageHeightForTable=oneRowHeight*
                                        numRowsOnAPage;
            int totalNumPages=
                  (int)Math.ceil((
                    (double)tableView.getRowCount())/
                                        numRowsOnAPage);
            if(pageIndex>=totalNumPages) {
                          return NO_SUCH_PAGE;
            }        g2.translate(pageFormat.getImageableX()+10,
                           pageFormat.getImageableY()-10);
           //记录打印张数
            g2.drawString("Page: "+(pageIndex+1)+" Copyright Asat",
                (int)pageWidth/2-35, (int)(pageHeight
                +fontHeight-fontDesent));
            g2.translate(0f,headerHeightOnPage);
            g2.translate(0f,-pageIndex*pageHeightForTable);        //如果JTABLE比纸张大,对JTABLE进行缩小打印
            if (pageIndex + 1 == totalNumPages) {
               int lastRowPrinted =
                     numRowsOnAPage * pageIndex;
               int numRowsLeft =
                     tableView.getRowCount()
                     - lastRowPrinted;
               g2.setClip(0,
                 (int)(pageHeightForTable * pageIndex),
                 (int) Math.ceil(tableWidthOnPage),
                 (int) Math.ceil(oneRowHeight *
                                   numRowsLeft));
            }
            //else clip to the entire area available.
            else{
                 g2.setClip(0,
                 (int)(pageHeightForTable*pageIndex),
                 (int) Math.ceil(tableWidthOnPage),
                 (int) Math.ceil(pageHeightForTable));
            }        g2.scale(scale,scale);
            //缩放操作
            tableView.paint(g2);
             //打印JTABLE的体
            g2.scale(1/scale,1/scale);
            g2.translate(0f,pageIndex*pageHeightForTable);
            g2.translate(0f, -headerHeightOnPage);
            g2.setClip(0, 0,
              (int) Math.ceil(tableWidthOnPage),
              (int)Math.ceil(headerHeightOnPage));
            g2.scale(scale,scale);
            tableView.getTableHeader().paint(g2);
            //打印JTABLE的头        return Printable.PAGE_EXISTS;
            //PrinterJob以Printable.PAGE_EXISTS来判断是否还需打印
       }
      

  4.   

    我现在的问题是打印的纸大小没办法设置,就算一页只有几行,也会打印出一张A4长度的纸张,造成纸张浪费。Paper的setSize方法是可以改变纸张的长度,但是调用该方法后成像区域不在正常位置,就算手动设置成像区域也不起作用。