2011-12-07 32 views
1

私のデスクトップアプリケーションでは、jPanelデータを用紙サイズが10x6のドットマトリックスプリンタで印刷する必要があります。 Javaでは、幅が高さより大きくならないという制限があります。しかし、私はこの限界を超えて私の仕事を達成することができます。もし高さがページ幅より小さければ、それをA4用紙として扱い、用紙の下端に給紙します。ページ幅が高さより大きいjpanelデータを印刷

ページの書式を指定しなかった場合は、印刷は良好ですが、余白が多い(上、下、左、右)。私はマージンを変更することができません。マージンのみを設定した場合は、ページをA4として扱い、フィードを一番下に置いています。

事前に印刷されたページにデータを印刷する必要があります。これを行う他の方法はありますか?私は風景を使用することができますか?そうであれば、テキストフローを(下から上に - X軸)コントロールする方法です。

これは、事前に

public int print(Graphics g, PageFormat pf, int page) throws PrinterException { 

     if (page > 0) { 
      return NO_SUCH_PAGE; 
     } 
     g.setFont(new java.awt.Font("Sans Serif", java.awt.Font.PLAIN, 10)); 
     Graphics2D g2d = (Graphics2D)g; 
     AffineTransform old = g2d.getTransform(); 
     if (pf.getOrientation() == PageFormat.LANDSCAPE) { 
      g2d.rotate(-Math.PI/2, 0, 0); 
      g2d.translate(-pf.getImageableWidth(), 0); 
     } 
     else { 
      g2d.rotate(Math.PI/2, 0, 0); 
      g2d.translate(0, -pf.getImageableHeight()); 
     } 
     jPanel1.printAll(g2d); 
     g2d.setTransform(old); 
     //g2d.translate(70, 30); 
     return PAGE_EXISTS; 
    } 

おかげで私のコード

PrinterJob job = PrinterJob.getPrinterJob(); 
PageFormat pageFormat = job.defaultPage(); 
pageFormat.setOrientation(PageFormat.LANDSCAPE); 
job.setPrintable(this,pageFormat); 
try { 
      job.print(); 
    } catch (PrinterException ex) { 
     System.out.println(ex); 
    } 

塗装方法です。

答えて

1

PageFormatの向きを横向きに設定し、内容を回転させます。 print()メソッドでは、コンテンツを回転して翻訳します。

Graphics2D g2d = (Graphics2D) g; 
AffineTransform old = g2d.getTransform(); 
if (contentOrientation == ORIENTATION_DOWN_UP) { 
    g2d.rotate(-Math.PI/2, 0, 0); 
    g2d.translate(-w, 0); 
} 
else { 
    g2d.rotate(Math.PI/2, 0, 0); 
    g2d.translate(0, -h); 
} 
//paint all your content here 
g2d.setTransform(old); 
+0

変更後は、ページのほぼ下端に印刷され、次のページの中央に給紙され、パネルの内容の半分だけが印刷されます。 –

関連する問題