Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1047 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [RESOLU] Qualité de l'impression

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Qualité de l'impression

n°1900148
fmdcc
Posté le 29-06-2009 à 14:16:54  profilanswer
 

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
mood
Publicité
Posté le 29-06-2009 à 14:16:54  profilanswer
 

n°1901867
fmdcc
Posté le 03-07-2009 à 09:47:05  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [RESOLU] Qualité de l'impression

 

Sujets relatifs
[Résolu] Arrondir avec la fonction Format[RESOLU] Problème étrange avec le Main
[Résolu] execution de jar : Failed to load Main-Class[résolu]variables de classe; raccourcis syntaxiques
[Résolu]Probleme avec des pointeur de structureExcel : impression "auto" d'onglets => PDF
[resolu]Ajax.updater et IE[RESOLU] Problème exécution .jar
[Resolu] [VBA] Macro Excel - Zone de texte[Résolu] Chevauchement de mémoire
Plus de sujets relatifs à : [RESOLU] Qualité de l'impression


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR