2016-10-23 8 views
0

Printable을 구현하는 클래스가 있습니다. 그 클래스에서는, BufferedImage의 List를 작성하는 public 메소드를 1 페이지에 인쇄합니다. 이제는 PrintDialog를 추가하여 사용자가 인쇄 할 페이지와 인쇄 매수를 선택할 수있게하려고합니다.PrintDialog 사용

나는 인터넷에서 약간의 연구를했는데 아마도 Book 클래스를 사용해야 만한다는 것을 알았지 만, 내 상황에서는이를 사용하는 방법을 알지 못합니다.

누구든지 예제를 제공 할 수 있습니까? 도와 주셔서 감사합니다 ...

확인. 확인

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

편집 : 여기에 내가 사용하고 코드입니다. 나는 진전을 보았다. 이제 새로운 문제입니다. 지금 페이지 범위를 선택할 수는 있지만 PrintSpace 사본 JSpinner는 응답이 없으며 JSpinner 텍스트 필드에 포함 된 내용에 관계없이 각 페이지에 대해 항상 print 메소드가 두 번 호출됩니다. 여기 내 코드가 ...

/** 
* 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로 프로젝트를 전송하면 제대로 작동합니다 ...