2016-10-23 18 views
0

私はPrintableを実装するクラスを持っています。そのクラスでは、各ページが1ページに印刷されたBufferedImageのListを作成するpublicメソッドがあります。今、私はPrintDialogを追加して、ユーザーが印刷するページと印刷する部数を選択できるようにします。PrintDialogの使用

私はインターネット上でいくつかの調査を行い、おそらくBookクラスを使用しなければならないことがわかりましたが、私の状況でそれを使用する方法はわかりません。

例を提供できますか?あなたのお手伝いをありがとう...

ok。 [OK]を

/** 
* Starts the print job 
* Allows variable scaling 
*/ 
public void startPrint(float scale, JTable rowHeader, JTable mainTable, boolean includeRowHeaders, boolean includeColumnHeaders) throws PrinterException{ 
    //getPages returns a List<BufferedImage 
    this.pages = getPages(scale, rowHeader, mainTable, includeRowHeaders, includeColumnHeaders); 
    this.numberOfPages = this.pages.size(); 

    HashPrintRequestAttributeSet attr = new HashPrintRequestAttributeSet(); 
    attr.add(new MediaPrintableArea(0f, 0f, 612/72f, 792/72f, MediaPrintableArea.INCH)); 
    PrinterJob job = PrinterJob.getPrinterJob(); 
    job.setPrintable(this); 
    job.print(attr); 
} 

EDIT :ここで私が使用しているコードです。私はいくつかの進歩を遂げました。今新しい問題。私は現在ページ範囲を選択できますが、PrintSpaceのコピーJSpinnerは応答しません.JSpinnerのテキストフィールドに関係なく、printメソッドは常に各ページに対して2回呼び出されます。ここに私のコードです...

/** 
* Starts the print job 
* Allows variable scaling 
*/ 
public void startPrint(float scale, JTable rowHeader, JTable mainTable, boolean includeRowHeaders, boolean includeColumnHeaders) throws PrinterException{ 
    //getPages returns a List<BufferedImage> 
    this.pages = getPages(scale, rowHeader, mainTable, includeRowHeaders, includeColumnHeaders); 
    this.numberOfPages = this.pages.size(); 

    HashPrintRequestAttributeSet attr = new HashPrintRequestAttributeSet(); 
    attr.add(new JobName("Test Print", null)); 
    attr.add(new MediaPrintableArea(0f, 0f, 612/72f, 792/72f, MediaPrintableArea.INCH)); 
    attr.add(new PageRanges(1, this.numberOfPages)); 
    attr.add(new Copies(1)); 
    PrinterJob job = PrinterJob.getPrinterJob(); 
    job.setPrintable(this); 

    if(job.printDialog(attr)){ 
     job.print(attr); 
    } 
} 

/** 
* The actual print routine 
* Prints the class level List<BufferedImage> 
* one after another 
*/ 
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException 
{ 
    if (pageIndex > this.numberOfPages - 1){ 
     return NO_SUCH_PAGE; 
    } 
    else{ 
     graphics.drawImage(this.pages.get(pageIndex), 0, 0, null); 
     JOptionPane.showMessageDialog(null, pageIndex); 
     return PAGE_EXISTS; 
    } 
} 
+0

現在編集しているコードを表示してください。状況を説明するのはうまくいきますが、実際に自分が扱っているものを見て自分のシステムで試してみることができれば、人々が手助けするのは簡単です。 –

+0

編集中に、使用している言語のタグを追加すると便利です。あなたは何を言っているのですか? –

答えて

0

私は編集した質問に間違いました。私はMicrosoft XPS Document Writerでテストしていました。実際の物理プリンタを使ってプロジェクトを別のPCに転送すると、正常に動作します...

関連する問題