2016-10-23 5 views
0

Ich habe eine Klasse, die Printable implementiert. In dieser Klasse habe ich eine öffentliche Methode, die eine Liste von gepufferten Bildern erstellt, wobei jedes auf einer Seite gedruckt wird. Jetzt möchte ich einen PrintDialog hinzufügen, damit der Benutzer die zu druckenden Seiten und die Anzahl der zu druckenden Kopien auswählen kann.Verwenden eines PrintDialogs

Ich habe einige Recherchen im Internet durchgeführt und festgestellt, dass ich wahrscheinlich die Book Klasse verwenden muss, aber ich sehe nicht, wie man das in meiner Situation verwendet.

Kann jemand ein Beispiel geben? Danke für Ihre Hilfe ...

ok. Hier ist der Code Ich verwende:

/** 
* 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 Ok. Ich habe Fortschritte gemacht. Neues Problem jetzt. Ich kann jetzt Seitenbereiche auswählen, aber der PrintDialog kopiert Jspinner nicht und unabhängig davon, was das JSpinner-Textfeld enthält, wird die Druckmethode immer zweimal für jede Seite aufgerufen. Hier ist mein Code ...

/** 
* 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

Bitte bearbeiten Sie Ihre Frage, um zu zeigen, welchen Code Sie derzeit haben. Die Situation zu beschreiben ist gut und gut, aber es ist für Menschen einfacher, zu helfen, wenn sie tatsächlich sehen können, womit Sie es zu tun haben, und es auf ihren eigenen Systemen versuchen. –

+0

Während Sie diese Änderung vornehmen, wäre es hilfreich, wenn Sie ein Tag für die von Ihnen verwendete Sprache hinzugefügt hätten. Und von welchem ​​Buch * Klasse sprichst du? –

Antwort

0

Ich war in meiner editierten Frage falsch. Ich habe auf Microsoft XPS Document Writer getestet. Wenn ich das Projekt auf einen anderen PC mit einem echten physischen Drucker übertragen habe, funktioniert es gut ...

Verwandte Themen