2016-08-21 1 views
0

J'ai donc 2 panneaux dans 1 panneau. Sur 1 panneau est le graphique, et sur la seconde est quelques informations. Je veux imprimer ce panneau qui contient ce panneau. J'ai donc utilisé quelques astuces pour que le panneau s'adapte au papier, mais cela n'a pas fonctionné complètement. Voici mon travail d'impression:Ajuster le panneau sur le papier

public void printComponenet(Component comp){ 

     PrinterJob pj = PrinterJob.getPrinterJob(); 
     pj.setJobName(" Print Component "); 
     PageFormat pf = pj.defaultPage(); 
     pf.setOrientation(PageFormat.LANDSCAPE); 

     pj.setPrintable (new Printable() {  
      public int print(Graphics g, PageFormat pf, int pageNum){ 

       if(pageNum > 0) 
       { 
        return Printable.NO_SUCH_PAGE; 
       } 

       Dimension compSize = comp.getPreferredSize(); 
       comp.setSize(compSize); 

       Dimension printSize = new Dimension(); 
       printSize.setSize(pf.getImageableWidth(), pf.getImageableHeight()); 

       double scaleFactor = getScaleFactorToFit(compSize, printSize); 

       if(scaleFactor > 1d) 
       { 
        scaleFactor = 1d; 
       } 

       double scaleWidth = compSize.width * scaleFactor; 
       double scaleHeight = compSize.height * scaleFactor; 

       Graphics2D g2 = (Graphics2D) g.create(); 

       double x = ((pf.getImageableWidth() - scaleWidth)/2d) + pf.getImageableX(); 
       double y = ((pf.getImageableHeight() - scaleHeight)/2d) + pf.getImageableY(); 

       AffineTransform at = new AffineTransform(); 
       at.translate(x, y); 
       at.scale(scaleFactor, scaleFactor); 
       g2.transform(at); 
       comp.printAll(g2); 
       g2.dispose(); 

       comp.revalidate(); 
       return Printable.PAGE_EXISTS; 
      } 
     }, pf); 
     if (pj.printDialog() == false) 
     return; 

     try { 
      pj.print(); 
     } catch (PrinterException ex) { 
      // handle exception 
     } 
} 

Et lorsque j'imprime ce panneau, il ressemble à ceci. Here

Comment le réparer? Le côté inférieur du papier est correct, je ne l'ai pas complètement pris en photo.

+0

Si le côté inférieur est OK, alors quels problèmes avez-vous spécifiquement? –

+0

Si vous regardez de plus près, vous verrez que sur le dessus du papier, les nombres sont coupés, et un peu de graphique est coupé – Quadrition

+0

Où est votre méthode 'getScaleFactorToFit (...)'? Et avez-vous voté MadProgrammer (où vous semblez avoir emprunté ce code)? –

Répondre

1

Au lieu de redimensionner les graphiques rendus, ce qui ne fera qu'aggraver l'artefact resampling, remplacez la méthode getPreferredSize() du paramètre Component et spécifiez la taille souhaitée. Utilisez une disposition telle que FlowLayout pour empêcher le redimensionnement. Comme il semble que vous utilisez JFreeChart, des exemples connexes peuvent être trouvés here et here.