fmdcc | 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 :
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.GridBagLayout;
- import java.awt.RenderingHints;
- import java.awt.print.PageFormat;
- import java.awt.print.Paper;
- import java.awt.print.Printable;
- import java.awt.print.PrinterException;
- import java.awt.print.PrinterJob;
- import java.util.Vector;
- import javax.swing.*;
- public class MPanelPrinter implements Printable
- {
- public MPanelPrinter(JPanel panel)
- {
- documentTitle = "";
- this.panel = panel;
- initPrintablePanel();
- }
- public void initPrintablePanel()
- {
- showPrintZone = false;
- fitIntoPage = false;
- wrapComponent = false;
- printJob = PrinterJob.getPrinterJob();
- pageFormat = printJob.defaultPage();
- pageFormat.setOrientation(1);
- }
- public void setOrientation(int orientation)
- {
- pageFormat.setOrientation(orientation);
- }
- public void setPrintZoneVisible(boolean status)
- {
- showPrintZone = status;
- }
- public void setWrapComponent(boolean status)
- {
- wrapComponent = status;
- }
- public void setFitIntoPage(boolean status)
- {
- fitIntoPage = status;
- }
- public int getPageWidth()
- {
- return (int)pageFormat.getImageableWidth();
- }
- public double getMarginTop ()
- {
- return pageFormat.getImageableY();
- }
- public double getMarginLeft ()
- {
- return pageFormat.getImageableX();
- }
- public void setLRMargins(int margin)
- {
- Paper paper = pageFormat.getPaper();
- paper.setImageableArea(paper.getImageableX() - (double)(margin / 2), paper.getImageableY(), paper.getImageableWidth() + (double)(margin / 2), paper.getImageableHeight());
- pageFormat.setPaper(paper);
- }
- public void setTBMargins(int margin)
- {
- Paper paper = pageFormat.getPaper();
- paper.setImageableArea(paper.getImageableX(), paper.getImageableY() - (double)(margin / 2), paper.getImageableWidth(), paper.getImageableHeight() + (double)(margin / 2));
- pageFormat.setPaper(paper);
- }
- public void setDocumentTitle(String title)
- {
- documentTitle = title;
- }
- public int print(Graphics g, PageFormat pf, int pageIndex)
- throws PrinterException
- {
- Dimension tailleDoc = panel.getSize();
- double hauteurDocu = tailleDoc.getHeight();
- double hauteurPage = pf.getImageableHeight();
- double largeurDocu = tailleDoc.getWidth();
- double largeurPage = pf.getImageableWidth();
- int totalNumPages = (int)Math.ceil(hauteurDocu / hauteurPage);
- if(wrapComponent)
- totalNumPages = taillePages.size();
- else
- if(fitIntoPage)
- totalNumPages = 1;
- double scaleX = largeurPage / largeurDocu;
- double scaleY = hauteurPage / hauteurDocu;
- if(pageIndex >= totalNumPages)
- return 1;
- Graphics2D g2d = (Graphics2D)g;
- g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
- g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
- g2d.translate(pf.getImageableX(), pf.getImageableY());
- if(fitIntoPage)
- {
- double ratio = Math.min(scaleX, scaleY);
- g2d.scale(ratio, ratio);
- } else
- if(wrapComponent)
- {
- if(pageIndex > 0)
- g2d.translate(0.0D, -((Double)taillePages.get(pageIndex - 1)).doubleValue());
- } else
- {
- g2d.translate(0.0D, (double)(-pageIndex) * hauteurPage);
- }
- panel.paint(g2d);
- if(wrapComponent)
- {
- double hauteurBlanc = ((Double)taillePages.get(pageIndex)).doubleValue();
- g2d.setColor(Color.WHITE);
- g2d.fillRect(0, (int)hauteurBlanc, (int)largeurPage, (int)hauteurBlanc + (int)hauteurPage);
- }
- if(wrapComponent)
- {
- if(pageIndex > 0)
- g2d.translate(0.0D, ((Double)taillePages.get(pageIndex - 1)).doubleValue());
- } else
- {
- g2d.translate(0.0D, (double)pageIndex * hauteurPage);
- }
- return 0;
- }
- public void print()
- {
- printJob.setPrintable(this, pageFormat);
- try
- {
- if(printJob.printDialog())
- {
- if(wrapComponent)
- calculatePages();
- Paper paper = pageFormat.getPaper();
- Paper save = pageFormat.getPaper();
- paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());
- pageFormat.setPaper(paper);
- printJob.setPrintable(this, pageFormat);
- printJob.print();
- pageFormat.setPaper(save);
- }
- }
- catch(PrinterException pe)
- {
- System.out.println("Erreur lors de l'impression du document: " + toString());
- }
- }
- private void calculatePages()
- {
- taillePages = new Vector();
- double hauteurPage = pageFormat.getImageableHeight();
- double hauteurTotal = 0.0D;
- double hauteurCumul = 0.0D;
- for(int i = 0; i < panel.getComponentCount(); i++)
- {
- int gridBagInsets = 0;
- if(panel.getLayout() instanceof GridBagLayout)
- gridBagInsets = ((GridBagLayout)panel.getLayout()).getConstraints(panel.getComponent(i)).insets.bottom + ((GridBagLayout)panel.getLayout()).getConstraints(panel.getComponent(i)).insets.top;
- double hauteurComponent = panel.getComponent(i).getSize().getHeight() + (double)gridBagInsets;
- if(hauteurComponent > hauteurPage)
- {
- wrapComponent = false;
- return;
- }
- hauteurTotal += hauteurComponent;
- if(hauteurTotal > hauteurPage)
- {
- hauteurTotal -= hauteurComponent;
- hauteurCumul += hauteurTotal;
- taillePages.add(new Double(hauteurCumul));
- hauteurTotal = hauteurComponent;
- }
- }
- hauteurCumul += hauteurTotal;
- taillePages.add(new Double(hauteurCumul));
- }
- private JPanel panel;
- private boolean showPrintZone;
- private boolean fitIntoPage;
- private boolean wrapComponent;
- private PageFormat pageFormat;
- private PrinterJob printJob;
- private Vector taillePages;
- private String documentTitle;
- public static final int PORTRAIT = 1;
- public static final int LANDSCAPE = 0;
- }
|
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
|