2016-10-23 3 views
0

J'ai une classe qui implémente Printable. dans cette classe, j'ai une méthode publique qui crée une liste d'images tamponnées avec chacune imprimée sur une page. Maintenant, je veux ajouter un PrintDialog, pour permettre à l'utilisateur de choisir les pages à imprimer et le nombre de copies à imprimer. J'ai fait des recherches sur internet et j'ai découvert que je devais probablement utiliser la classe Book, mais je ne vois pas comment l'utiliser dans ma situation.Utilisation d'un fichier PrintDialog

Quelqu'un peut-il donner un exemple? Merci pour votre aide ...

ok. Voici le code que je utilise:

/** 
* 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. J'ai fait des progrès. Nouveau problème maintenant. Je peux maintenant sélectionner des plages de pages, mais les copies PrintDialog JSpinner ne répondent pas et peu importe ce que contient le champ de texte JSpinner, la méthode d'impression est invoquée deux fois pour chaque page. Voici mon 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

S'il vous plaît modifier votre question pour montrer quel code vous avez actuellement. Décrire la situation est une bonne chose, mais c'est plus facile pour les gens de voir ce que vous avez à faire et de l'essayer sur leurs propres systèmes. –

+0

Pendant que vous effectuez cette modification, il serait utile que vous ajoutiez un tag pour la langue que vous utilisez. Et de quelle classe * Book * parlez-vous? –

Répondre

0

Je me suis trompé dans ma question éditée. Je testais sur Microsoft XPS Document Writer. Quand j'ai transféré le projet à un autre PC avec une vraie imprimante physique cela fonctionne bien ...