2011-12-01 48 views
4

我嘗試將大小設置爲零或在java中刪除打印文檔的邊框。它總是有一個標準的白色邊框。java打印 - 邊框的設置大小

這裏是我的功能在打印的JPanel和一些組件:

public void printComponent(){ 

      PrinterJob pj = PrinterJob.getPrinterJob(); 
      pj.setJobName(" Print Component "); 

      pj.setPrintable (new Printable() { 

      @Override 
      public int print(Graphics pg, PageFormat pf, int pageNum) throws PrinterException { 
       if (pageNum > 0){ 
         return Printable.NO_SUCH_PAGE; 
         } 

         Graphics2D g2 = (Graphics2D) pg; 
         g2.translate(pf.getImageableX(), pf.getImageableY()); 
         TournamentView.this.paint(g2); 
         return Printable.PAGE_EXISTS; 
      } 

      }); 
      if (pj.printDialog() == false) 
      return; 

      try { 
       PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
       aset.add(OrientationRequested.LANDSCAPE); 
       PrinterResolution pr = new PrinterResolution(200, 200, PrinterResolution.DPI); 
       aset.add(pr); 
       pj.print(aset); 
      } catch (PrinterException ex) { 
       // handle exception 
      } 
     } 

我使用Adobe PDF打印機,因爲我沒有任何打印機在這裏。有什麼建議麼?

回答

6

使用需要PageFormat參數的版本PrinterJob.setPrintable()

在的PageFormat,設置紙張的imageable area沒有邊界(X = 0,Y = 0,寬度=紙張的寬度,高度=紙的高度)。

您可能要養活,通過PrinterJob.validatePage(),其中:

返回與調整其設置與此PrinterJob的當前打印機兼容頁面的克隆。例如,返回的PageFormat可以將其可成像區域調整爲適合當前打印機使用的紙張的物理區域。

這是一個好主意,因爲打印機可能不支持無邊界打印,並且這種方法會調整您的PageFormat,以便設置與打印機兼容。

這裏是打印去掉邊框頁面上的一些文本的例子:

PrinterJob pj = PrinterJob.getPrinterJob(); 
PageFormat format = pj.getPageFormat(null); 
Paper paper = format.getPaper(); 
//Remove borders from the paper 
paper.setImageableArea(0.0, 0.0, format.getPaper().getWidth(), format.getPaper().getHeight()); 
format.setPaper(paper); 

pj.setPrintable(new Printable() 
{ 
    @Override 
    public int print(Graphics pg, PageFormat pf, int pageNum) 
      throws PrinterException 
    { 
     if (pageNum > 0) 
      return Printable.NO_SUCH_PAGE; 

     Graphics2D g2 = (Graphics2D)pg; 
     g2.translate(pf.getImageableX(), pf.getImageableY()); 
     int textHeight = g2.getFontMetrics().getHeight(); 
     g2.drawString("Good morning, what will be for eating?", 0, textHeight); 
     return Printable.PAGE_EXISTS; 
    } 
}, format); 

if (!pj.printDialog()) 
    return; 

pj.print(); 

與後記測試 - 在Windows>文件打印機。還剩下一個小邊框,但這可能是打印機驅動程序的限制。

+0

我試過了,但沒有結果。你能給一些代碼嗎? – Anthea

+0

@Anthea添加了示例代碼 – prunge

+0

這個工作非常好,現在它發生了大約需要10秒的時間才能彈出打印機對話框 - 任何想法? – Anthea