[RESOLU] Qualité de l'impression

Qualité de l'impression [RESOLU] - Java - Programmation

Marsh Posté le 29-06-2009 à 14:16:54    

rebonjour,
 
Je suis en ce moment confronté à un petit problème qui est plutôt génant.
Mon application doit pouvoir imprimer les formulaires dont elles disposent.  
J'ai donc chercher sur internet comment faire cela et je suis tomber sur une classe toute faite que j'ai donc intégré à mon programme.
Cette classe remplit très bien sont role mais je suis quelques peu déçu du rendu finale sur feuille.
 
La résolution est très faible et quand il y a quelques chose d'écrit en police 8, on n'y voit presque rien si ce n'est des carrés comme des pixels...
 
Le reste de l'application est en police 12 donc c'est pas très fin mais c'est tout à fait lisible mais j'ai besoin de la police 8 pour écrire en bas de page les coordonnées de la société pour laquelle je développe cette application.
 
Voilà la classe que j'utilise pour imprimer :
 

Code :
  1. import java.awt.Color;
  2. import java.awt.Dimension;
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.GridBagLayout;
  6. import java.awt.RenderingHints;
  7. import java.awt.print.PageFormat;
  8. import java.awt.print.Paper;
  9. import java.awt.print.Printable;
  10. import java.awt.print.PrinterException;
  11. import java.awt.print.PrinterJob;
  12. import java.util.Vector;
  13. import javax.swing.*;
  14. public class MPanelPrinter implements Printable
  15. {
  16.     public MPanelPrinter(JPanel panel)
  17.     {
  18.         documentTitle = "";
  19.         this.panel = panel;
  20.         initPrintablePanel();
  21.     }
  22.     public void initPrintablePanel()
  23.     {
  24.         showPrintZone = false;
  25.         fitIntoPage = false;
  26.         wrapComponent = false;
  27.         printJob = PrinterJob.getPrinterJob();
  28.         pageFormat = printJob.defaultPage();
  29.         pageFormat.setOrientation(1);
  30.     }
  31.     public void setOrientation(int orientation)
  32.     {
  33.         pageFormat.setOrientation(orientation);
  34.     }
  35.     public void setPrintZoneVisible(boolean status)
  36.     {
  37.         showPrintZone = status;
  38.     }
  39.     public void setWrapComponent(boolean status)
  40.     {
  41.         wrapComponent = status;
  42.     }
  43.     public void setFitIntoPage(boolean status)
  44.     {
  45.         fitIntoPage = status;
  46.     }
  47.     public int getPageWidth()
  48.     {
  49.         return (int)pageFormat.getImageableWidth();
  50.     }
  51.     public double getMarginTop ()
  52.     {
  53.         return pageFormat.getImageableY();
  54.     }
  55.     public double getMarginLeft ()
  56.     {
  57.         return pageFormat.getImageableX();
  58.     }
  59.     public void setLRMargins(int margin)
  60.     {
  61.         Paper paper = pageFormat.getPaper();
  62.         paper.setImageableArea(paper.getImageableX() - (double)(margin / 2), paper.getImageableY(), paper.getImageableWidth() + (double)(margin / 2), paper.getImageableHeight());
  63.         pageFormat.setPaper(paper);
  64.     }
  65.     public void setTBMargins(int margin)
  66.     {
  67.         Paper paper = pageFormat.getPaper();
  68.         paper.setImageableArea(paper.getImageableX(), paper.getImageableY() - (double)(margin / 2), paper.getImageableWidth(), paper.getImageableHeight() + (double)(margin / 2));
  69.         pageFormat.setPaper(paper);
  70.     }
  71.     public void setDocumentTitle(String title)
  72.     {
  73.         documentTitle = title;
  74.     }
  75.     public int print(Graphics g, PageFormat pf, int pageIndex)
  76.         throws PrinterException
  77.     {
  78.         Dimension tailleDoc = panel.getSize();
  79.         double hauteurDocu = tailleDoc.getHeight();
  80.         double hauteurPage = pf.getImageableHeight();
  81.         double largeurDocu = tailleDoc.getWidth();
  82.         double largeurPage = pf.getImageableWidth();
  83.         int totalNumPages = (int)Math.ceil(hauteurDocu / hauteurPage);
  84.         if(wrapComponent)
  85.             totalNumPages = taillePages.size();
  86.         else
  87.         if(fitIntoPage)
  88.             totalNumPages = 1;
  89.         double scaleX = largeurPage / largeurDocu;
  90.         double scaleY = hauteurPage / hauteurDocu;
  91.         if(pageIndex >= totalNumPages)
  92.             return 1;
  93.         Graphics2D g2d = (Graphics2D)g;
  94.         g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
  95.         g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
  96.         g2d.translate(pf.getImageableX(), pf.getImageableY());
  97.         if(fitIntoPage)
  98.         {
  99.             double ratio = Math.min(scaleX, scaleY);
  100.             g2d.scale(ratio, ratio);
  101.         } else
  102.         if(wrapComponent)
  103.         {
  104.             if(pageIndex > 0)
  105.                 g2d.translate(0.0D, -((Double)taillePages.get(pageIndex - 1)).doubleValue());
  106.         } else
  107.         {
  108.             g2d.translate(0.0D, (double)(-pageIndex) * hauteurPage);
  109.         }
  110.         panel.paint(g2d);
  111.         if(wrapComponent)
  112.         {
  113.             double hauteurBlanc = ((Double)taillePages.get(pageIndex)).doubleValue();
  114.             g2d.setColor(Color.WHITE);
  115.             g2d.fillRect(0, (int)hauteurBlanc, (int)largeurPage, (int)hauteurBlanc + (int)hauteurPage);
  116.         }
  117.         if(wrapComponent)
  118.         {
  119.             if(pageIndex > 0)
  120.                 g2d.translate(0.0D, ((Double)taillePages.get(pageIndex - 1)).doubleValue());
  121.         } else
  122.         {
  123.             g2d.translate(0.0D, (double)pageIndex * hauteurPage);
  124.         }
  125.         return 0;
  126.     }
  127.     public void print()
  128.     {
  129.         printJob.setPrintable(this, pageFormat);
  130.         try
  131.         {
  132.             if(printJob.printDialog())
  133.             {
  134.                 if(wrapComponent)
  135.                     calculatePages();
  136.                 Paper paper = pageFormat.getPaper();
  137.                 Paper save = pageFormat.getPaper();
  138.                 paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());
  139.                 pageFormat.setPaper(paper);
  140.                 printJob.setPrintable(this, pageFormat);
  141.                 printJob.print();
  142.                 pageFormat.setPaper(save);
  143.             }
  144.         }
  145.         catch(PrinterException pe)
  146.         {
  147.             System.out.println("Erreur lors de l'impression du document: " + toString());
  148.         }
  149.     }
  150.     private void calculatePages()
  151.     {
  152.         taillePages = new Vector();
  153.         double hauteurPage = pageFormat.getImageableHeight();
  154.         double hauteurTotal = 0.0D;
  155.         double hauteurCumul = 0.0D;
  156.         for(int i = 0; i < panel.getComponentCount(); i++)
  157.         {
  158.             int gridBagInsets = 0;
  159.             if(panel.getLayout() instanceof GridBagLayout)
  160.                 gridBagInsets = ((GridBagLayout)panel.getLayout()).getConstraints(panel.getComponent(i)).insets.bottom + ((GridBagLayout)panel.getLayout()).getConstraints(panel.getComponent(i)).insets.top;
  161.             double hauteurComponent = panel.getComponent(i).getSize().getHeight() + (double)gridBagInsets;
  162.             if(hauteurComponent > hauteurPage)
  163.             {
  164.                 wrapComponent = false;
  165.                 return;
  166.             }
  167.             hauteurTotal += hauteurComponent;
  168.             if(hauteurTotal > hauteurPage)
  169.             {
  170.                 hauteurTotal -= hauteurComponent;
  171.                 hauteurCumul += hauteurTotal;
  172.                 taillePages.add(new Double(hauteurCumul));
  173.                 hauteurTotal = hauteurComponent;
  174.             }
  175.         }
  176.         hauteurCumul += hauteurTotal;
  177.         taillePages.add(new Double(hauteurCumul));
  178.     }
  179.     private JPanel panel;
  180.     private boolean showPrintZone;
  181.     private boolean fitIntoPage;
  182.     private boolean wrapComponent;
  183.     private PageFormat pageFormat;
  184.     private PrinterJob printJob;
  185.     private Vector taillePages;
  186.     private String documentTitle;
  187.     public static final int PORTRAIT = 1;
  188.     public static final int LANDSCAPE = 0;
  189. }


 
 
Pas d'idée?  
Ca doit pourtant arriver souvent de faire une application qui imprimer des formulaires?


Message édité par fmdcc le 03-07-2009 à 09:47:23
Reply

Marsh Posté le 29-06-2009 à 14:16:54   

Reply

Marsh Posté le 03-07-2009 à 09:47:05    

Mon problème s'est résolu tout seul.
 
J'ai juste voulu installer le jdk 6u14 au lieu du 6u13 que j'avais avant ainsi que la nouvelle version de NetBeans 6.7 et là mes problèmes d'impression ont disparu.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed